From 8d58ef15e8bc12f88baa5a988fa29c5c9307aacd Mon Sep 17 00:00:00 2001 From: ruisu Date: Thu, 6 Aug 2026 16:00:25 +0800 Subject: [PATCH 01/24] =?UTF-8?q?feat:=E5=9C=A8=E5=B9=B3=E4=BB=93=E6=97=B6?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=A3=8E=E6=8E=A7=E6=A0=A1=E9=AA=8C=EF=BC=8C?= =?UTF-8?q?=E5=88=9B=E5=BB=BA=E9=80=9A=E7=94=A8=E8=B6=85=E6=97=B6=E6=95=99?= =?UTF-8?q?=E7=A0=94=E5=87=BD=E6=95=B0=EF=BC=8C=E4=BB=A5=E5=A4=87=E4=BA=A4?= =?UTF-8?q?=E6=98=93=E7=A1=AE=E8=AE=A4=E8=80=81=E9=A3=8E=E6=8E=A7=E4=B8=8B?= =?UTF-8?q?=E7=BA=BF=E5=90=8E=E6=8E=A5=E5=85=A5=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../RiskEngine/Compile/RuleCompiler.cs | 6 + .../RiskEngine/Helper/RiskCalendarHelper.cs | 31 +- YLErpDAL/Modules/RiskEngine/RiskContext.cs | 5 + .../Modules/RiskEngine/RiskTrialService.cs | 268 ++++++++++++++++++ .../Modules/RiskModule/QuotaMonitorService.cs | 34 +++ .../Modules/SwapModule/SwapDealService.cs | 63 +++- YLErpWeb/Controllers/SwapTrade2Controller.cs | 111 +++++++- .../Scripts/app/swaptrade/unwindSwapTrade.js | 74 ++++- 8 files changed, 561 insertions(+), 31 deletions(-) create mode 100644 YLErpDAL/Modules/RiskEngine/RiskTrialService.cs diff --git a/YLErpDAL/Modules/RiskEngine/Compile/RuleCompiler.cs b/YLErpDAL/Modules/RiskEngine/Compile/RuleCompiler.cs index c8b74717..0890d97e 100644 --- a/YLErpDAL/Modules/RiskEngine/Compile/RuleCompiler.cs +++ b/YLErpDAL/Modules/RiskEngine/Compile/RuleCompiler.cs @@ -26,6 +26,11 @@ namespace YLErp.Modules.RiskEngine /// public string TriggerPoint { get; set; } + /// + /// 当前平仓请求提交的平仓日期 + /// + public DateTime? UnwindDate { get; set; } + /// /// 数据库上下文,供规则公式直接查询数据库 /// @@ -396,6 +401,7 @@ namespace YLErp.Modules.RiskEngine { TradeId = ctx.TradeId, TriggerPoint = ctx.TriggerPoint, + UnwindDate = ctx.UnwindDate, DbContext = ctx.DbContext }; return runner(globals).GetAwaiter().GetResult(); diff --git a/YLErpDAL/Modules/RiskEngine/Helper/RiskCalendarHelper.cs b/YLErpDAL/Modules/RiskEngine/Helper/RiskCalendarHelper.cs index 5109aee0..07dee68c 100644 --- a/YLErpDAL/Modules/RiskEngine/Helper/RiskCalendarHelper.cs +++ b/YLErpDAL/Modules/RiskEngine/Helper/RiskCalendarHelper.cs @@ -33,6 +33,25 @@ namespace YLErp.Modules.RiskEngine return GetPreviousTradingDay(dbContext, date, "IB", "银行间"); } + /// + /// 判断指定日期是否为银行间交易日。 + /// + /// 当前风控执行使用的数据库上下文。 + /// 待判断的平仓日期。 + /// 日期不在银行间非交易日集合中时返回 true。 + /// 数据库上下文为空。 + /// 缺少银行间日历或日历内容异常。 + public static bool IsInterbankTradingDay(YLContext dbContext, DateTime date) + { + if (dbContext == null) + throw new ArgumentNullException(nameof(dbContext)); + + var holidayCache = HolidayCaches.GetOrCreateValue(dbContext); + var holidays = GetHolidays(dbContext, date.Year, "IB", "银行间", holidayCache); + var dateText = date.Date.ToString("yyyy,MM,dd", CultureInfo.InvariantCulture); + return !holidays.Contains(dateText); + } + public static DateTime GetPreviousExchangeTradingDay(YLContext dbContext, DateTime date) { return GetPreviousTradingDay(dbContext, date, "CHN", "交易所"); @@ -77,11 +96,13 @@ namespace YLErp.Modules.RiskEngine if (holidayCache.TryGetValue(cacheKey, out var holidays)) return holidays; - // 同一年可能存在多种市场日历,按规则对应的市场代码读取非交易日。 - var calendar = dbContext.calendar - .Where(c => c.Year == year && (c.ValidState == null || c.ValidState != ConsGlobal.InValid)) - .ToList() - .FirstOrDefault(c => string.Equals(c.Country, country, StringComparison.OrdinalIgnoreCase)); + // 在数据库端同时按年份和市场代码筛选,避免加载同一年份的其他市场日历。 + var normalizedCountry = country.ToUpperInvariant(); + var calendar = dbContext.calendar.FirstOrDefault(c => + c.Year == year + && (c.ValidState == null || c.ValidState != ConsGlobal.InValid) + && c.Country != null + && c.Country.ToUpper() == normalizedCountry); if (calendar == null) throw new Exception($"未找到{year}年{calendarName}日历"); diff --git a/YLErpDAL/Modules/RiskEngine/RiskContext.cs b/YLErpDAL/Modules/RiskEngine/RiskContext.cs index 9686f980..a87f9f7c 100644 --- a/YLErpDAL/Modules/RiskEngine/RiskContext.cs +++ b/YLErpDAL/Modules/RiskEngine/RiskContext.cs @@ -17,6 +17,11 @@ namespace YLErp.Modules.RiskEngine /// public string TriggerPoint { get; set; } + /// + /// 当前平仓请求提交的平仓日期,供平仓阶段规则直接使用。 + /// + public DateTime? UnwindDate { get; set; } + /// /// 数据库上下文,供规则公式直接查询数据库 /// diff --git a/YLErpDAL/Modules/RiskEngine/RiskTrialService.cs b/YLErpDAL/Modules/RiskEngine/RiskTrialService.cs new file mode 100644 index 00000000..442c84ed --- /dev/null +++ b/YLErpDAL/Modules/RiskEngine/RiskTrialService.cs @@ -0,0 +1,268 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Qdp.Foundation.Utilities; +using YLErp.BLL; +using YLErp.DBModels; +using YLErp.Enums; + +namespace YLErp.Modules.RiskEngine +{ + /// + /// 新风控通用试算服务,负责按业务触发时点执行规则、保存试算结果并校验二次确认。 + /// + public class RiskTrialService : YLBaseService + { + private readonly IYcLogger _logger = LogFactory.GetLogger("RiskTrialService"); + + /// + /// 使用当前业务服务的用户和数据库上下文创建新风控试算服务。 + /// + /// 当前业务服务。 + public RiskTrialService(YLBaseService baseService) : base(baseService) + { + } + + /// + /// 执行一次独立于老风控的新风控试算并保存试算记录。 + /// + /// 包含交易、触发时点及业务日期的风控上下文。 + /// 试算来源,由具体业务场景约定。 + /// 二次确认信息;首次试算传空。 + /// 包含阻断、审批、提示及试算记录ID的统一结果。 + public RiskTrialResult CheckRisk(RiskContext context, int trialSource, RiskTrialConfirmation confirmation = null) + { + if (context == null) + { + throw new ArgumentNullException(nameof(context)); + } + if (context.TradeId <= 0) + { + throw new ArgumentException("交易ID必须大于0", nameof(context)); + } + if (string.IsNullOrWhiteSpace(context.TriggerPoint)) + { + throw new ArgumentException("风控触发时点不能为空", nameof(context)); + } + + var confirmedRuleIds = new HashSet(); + var confirmationExpired = false; + if (confirmation != null) + { + confirmationExpired = !TryGetConfirmedRuleIds(context, trialSource, confirmation, confirmedRuleIds); + } + + var riskResult = new RiskEngineService(this).EvaluateRisk(context, context.TriggerPoint); + var currentApprovalRules = riskResult.TriggeredRules + .Where(rule => rule.ControlStrategy == RiskControlStrategy.Approval) + .ToList(); + var pendingApprovalRules = confirmationExpired + ? currentApprovalRules + : currentApprovalRules.Where(rule => !confirmedRuleIds.Contains(rule.RuleId)).ToList(); + var trial = CreateQuotaTrial(context, trialSource, riskResult, pendingApprovalRules); + new Modules.RiskModule.QuotaMonitorService(this).SaveQuotaTrial(trial); + + var result = new RiskTrialResult + { + Blocked = riskResult.Blocked, + NeedApproval = pendingApprovalRules.Any(), + ShowTip = riskResult.ShowTip, + ConfirmationExpired = confirmationExpired, + TrialDataId = trial.id, + Message = trial.RiskWarningDetails, + ApprovalRuleIds = pendingApprovalRules + .Select(rule => rule.RuleId) + .Where(ruleId => !string.IsNullOrWhiteSpace(ruleId)) + .Distinct() + .ToList() + }; + result.Passed = !result.Blocked && !result.NeedApproval; + + _logger.Info($"[新风控试算] TradeId: {context.TradeId}, TriggerPoint: {context.TriggerPoint}, TrialSource: {trialSource}, TrialDataId: {result.TrialDataId}, Passed: {result.Passed}, Blocked: {result.Blocked}, NeedApproval: {result.NeedApproval}, ShowTip: {result.ShowTip}, ConfirmationExpired: {result.ConfirmationExpired}"); + return result; + } + + /// + /// 校验二次确认记录,并恢复首次试算中已确认的审批规则ID。 + /// + private bool TryGetConfirmedRuleIds(RiskContext context, int trialSource, RiskTrialConfirmation confirmation, ISet confirmedRuleIds) + { + if (confirmation.TrialDataId <= 0 || confirmation.ExpireSeconds <= 0) + { + return false; + } + + var trial = DbContext.quotaTrial.FirstOrDefault(item => item.id == confirmation.TrialDataId); + if (trial == null + || trial.TradeId != context.TradeId + || trial.TrialSource != trialSource + || !trial.OptDate.HasValue + || !HasMatchingRequestContext(trial.RiskWarningDetails, context)) + { + return false; + } + if (DateTime.Now - trial.OptDate.Value > TimeSpan.FromSeconds(confirmation.ExpireSeconds)) + { + return false; + } + + foreach (var ruleId in ParseApprovalRuleIds(trial.RiskWarningDetails)) + { + confirmedRuleIds.Add(ruleId); + } + return confirmedRuleIds.Count > 0; + } + + /// + /// 校验二次提交与首次试算的触发点和平仓日期一致,避免复用其他业务参数生成的审批记录。 + /// + private static bool HasMatchingRequestContext(string details, RiskContext context) + { + var expectedContext = BuildRequestContext(context); + return (details ?? string.Empty) + .Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries) + .Any(line => string.Equals(line, expectedContext, StringComparison.Ordinal)); + } + + /// + /// 从系统生成的审批规则明细中恢复规则ID,避免直接信任前端提交的放行规则列表。 + /// + private static IEnumerable ParseApprovalRuleIds(string details) + { + const string approvalTitle = "[风控引擎] 规则触发:需审批"; + const string ruleIdPrefix = "规则ID:"; + var inApprovalSection = false; + foreach (var line in (details ?? string.Empty).Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries)) + { + if (line.StartsWith("[风控引擎] 规则触发:", StringComparison.Ordinal)) + { + inApprovalSection = line.StartsWith(approvalTitle, StringComparison.Ordinal); + continue; + } + if (!inApprovalSection) + { + continue; + } + + var ruleIdStart = line.IndexOf(ruleIdPrefix, StringComparison.Ordinal); + if (ruleIdStart < 0) + { + continue; + } + ruleIdStart += ruleIdPrefix.Length; + var ruleIdEnd = line.IndexOf(';', ruleIdStart); + var ruleId = (ruleIdEnd < 0 ? line.Substring(ruleIdStart) : line.Substring(ruleIdStart, ruleIdEnd - ruleIdStart)).Trim(); + if (!string.IsNullOrWhiteSpace(ruleId)) + { + yield return ruleId; + } + } + } + + /// + /// 将新风控引擎结果转换为现有试算记录,供详情页面和二次确认复用。 + /// + private QuotaTrial CreateQuotaTrial(RiskContext context, int trialSource, RiskResult riskResult, IReadOnlyCollection pendingApprovalRules) + { + // 业务入口已通过Find加载交易,优先复用当前上下文跟踪的实体,避免重复查询数据库。 + var trade = DbContext.trade.Local.FirstOrDefault(item => item.id == context.TradeId) + ?? DbContext.trade.Find(context.TradeId); + var trial = new QuotaTrial + { + TradeId = context.TradeId, + TradeNumber = trade?.TradeNumber ?? string.Empty, + ClientName = trade?.ClientName ?? string.Empty, + TrialSource = trialSource, + TrialStatus = riskResult.Blocked + ? QuotaTrialStatusEnum.Error + : pendingApprovalRules.Any() ? QuotaTrialStatusEnum.RiskWarning : QuotaTrialStatusEnum.Success, + NewRiskBlocked = riskResult.Blocked, + NewRiskNeedApproval = pendingApprovalRules.Any(), + RiskWarningDetails = BuildRiskDetails(context, riskResult, pendingApprovalRules) + }; + trial.ApprovalRuleIds = pendingApprovalRules + .Select(rule => rule.RuleId) + .Where(ruleId => !string.IsNullOrWhiteSpace(ruleId)) + .Distinct() + .ToList(); + return trial; + } + + /// + /// 按控制策略生成与现有试算详情页面兼容的规则明细。 + /// + private static string BuildRiskDetails(RiskContext context, RiskResult riskResult, IReadOnlyCollection pendingApprovalRules) + { + var lines = new List + { + BuildRequestContext(context) + }; + AppendRuleDetails(lines, "禁止", riskResult.TriggeredRules.Where(rule => rule.ControlStrategy == RiskControlStrategy.Block)); + AppendRuleDetails(lines, "需审批", pendingApprovalRules); + AppendRuleDetails(lines, "提示", riskResult.TriggeredRules.Where(rule => rule.ControlStrategy == RiskControlStrategy.ShowTip)); + return string.Join("\n", lines); + } + + /// + /// 生成首次试算的业务请求标识,供二次确认严格校验业务参数。 + /// + private static string BuildRequestContext(RiskContext context) + { + return $"[风控引擎] 请求上下文:触发点:{context.TriggerPoint ?? string.Empty};平仓日期:{context.UnwindDate?.Date:yyyy-MM-dd}"; + } + + /// + /// 追加指定控制策略的规则明细。 + /// + private static void AppendRuleDetails(ICollection lines, string strategyName, IEnumerable rules) + { + var ruleList = rules.ToList(); + if (!ruleList.Any()) + { + return; + } + + lines.Add($"[风控引擎] 规则触发:{strategyName}"); + foreach (var rule in ruleList) + { + var detail = $"应用ID:{rule.ApplicationId?.ToString() ?? "-"};规则ID:{rule.RuleId};规则名称:{rule.RuleName};规则说明:{rule.RuleText}"; + if (!string.IsNullOrWhiteSpace(rule.Message)) + { + detail += $";信息:{rule.Message}"; + } + lines.Add(detail); + } + } + } + + /// + /// 新风控二次确认参数。 + /// + public class RiskTrialConfirmation + { + /// + /// 首次风控试算记录ID。 + /// + public int TrialDataId { get; set; } + + /// + /// 首次试算允许确认放行的有效时长,单位为秒。 + /// + public int ExpireSeconds { get; set; } + } + + /// + /// 新风控通用试算结果。 + /// + public class RiskTrialResult + { + public bool Passed { get; set; } + public bool Blocked { get; set; } + public bool NeedApproval { get; set; } + public bool ShowTip { get; set; } + public bool ConfirmationExpired { get; set; } + public int TrialDataId { get; set; } + public string Message { get; set; } + public List ApprovalRuleIds { get; set; } = new List(); + } +} diff --git a/YLErpDAL/Modules/RiskModule/QuotaMonitorService.cs b/YLErpDAL/Modules/RiskModule/QuotaMonitorService.cs index e2f7c1f4..bc3ac12c 100644 --- a/YLErpDAL/Modules/RiskModule/QuotaMonitorService.cs +++ b/YLErpDAL/Modules/RiskModule/QuotaMonitorService.cs @@ -6931,6 +6931,40 @@ namespace YLErp.Modules.RiskModule DbContext.SaveChanges(); } + /// + /// 保存平仓风控试算说明,并保留首次试算时间作为二次确认超时起点。 + /// + /// 平仓风控试算记录ID。 + /// 用户填写的特批说明。 + /// 更新后的平仓风控试算记录。 + public QuotaTrial SaveCloseRiskTrialRemark(int trialDataId, string remark) + { + if (trialDataId <= 0) + { + throw new ServiceException("无效的平仓风控试算记录"); + } + if (string.IsNullOrWhiteSpace(remark)) + { + throw new ServiceException("必须填写说明内容,才可以提交平仓"); + } + + const int closeTrialSource = 2; + var trial = DbContext.quotaTrial.FirstOrDefault(item => item.id == trialDataId); + if (trial == null + || trial.TrialSource != closeTrialSource + || trial.TrialStatus != QuotaTrialStatusEnum.RiskWarning) + { + throw new ServiceException("未找到有效的平仓风控审批记录"); + } + + // 仅保存说明和操作人,不更新OptDate,避免重置首次试算的确认超时时间。 + trial.Remark = remark.Trim(); + trial.OptId = UserId; + trial.OptName = UserName; + DbContext.SaveChanges(); + return trial; + } + } } diff --git a/YLErpDAL/Modules/SwapModule/SwapDealService.cs b/YLErpDAL/Modules/SwapModule/SwapDealService.cs index eb960cc4..45dd3142 100644 --- a/YLErpDAL/Modules/SwapModule/SwapDealService.cs +++ b/YLErpDAL/Modules/SwapModule/SwapDealService.cs @@ -8,6 +8,7 @@ using YLErp.DBModels.Enums; using YLErp.Helpers; using YLErp.Modules.DataProviderModule; using YLErp.Modules.EodModule; +using YLErp.Modules.RiskEngine; using YLErp.Modules.TradeModule; using YLErp.Modules.TradeModule.DealModule; using YLErp.QdpModule; @@ -1257,14 +1258,27 @@ namespace YLErp.Modules.SwapModule /// 单标的平仓 /// /// + /// 新风控二次确认信息;首次提交传空。 + /// 本次平仓的新风控试算结果。 /// - public void SwapUnwind(UnwindData unwindData) + public RiskTrialResult SwapUnwind(UnwindData unwindData, RiskTrialConfirmation confirmation = null) { + if (unwindData == null) + { + throw new ServiceException("平仓信息不能为空"); + } + var td = FindTrade(unwindData.SwapTradeId); if (td == null) { throw new ServiceException("未找到交易信息"); } + // 直接平仓不经过审核提交入口,落库前仍需执行平仓阶段的新风控,避免绕过 CLOSE_REVIEW 规则。 + var riskTrialResult = CheckCloseRisk(unwindData, confirmation); + if (!riskTrialResult.Passed) + { + return riskTrialResult; + } //CheckLastEod(unwindData.ValueDate, td.StartDate.Value, unwindData.SwapTradeId); //去掉平仓收盘限制 ValidateFrontendPnL(unwindData, isIncome: false); // 只读校验告警,不阻断交易 // 前端按"占期初(original)"语义传 ClosePercent(A);后端全链路按"占剩余(remaining)"语义(B)消费。 @@ -1304,6 +1318,7 @@ namespace YLErp.Modules.SwapModule { TriggerRealtimeSwapPosition(); } + return riskTrialResult; } /// /// 自动全平仓 @@ -1824,19 +1839,36 @@ namespace YLErp.Modules.SwapModule /// /// /// + /// 新风控二次确认信息;首次提交传空。 + /// 平仓事件返回新风控试算结果,互换事件返回空。 /// - public void ApplySwapTrade(UnwindData unwindData, int eventType) + public RiskTrialResult ApplySwapTrade(UnwindData unwindData, int eventType, RiskTrialConfirmation confirmation = null) { + if (unwindData == null) + { + throw new ServiceException("互换或平仓信息不能为空"); + } + var td = FindTrade(unwindData.SwapTradeId); if (td == null) { throw new ServiceException("未找到交易信息"); } + RiskTrialResult riskTrialResult = null; if (eventType == (int)SwapEventTypeEnum.互换) { NormalizeIncomeUnwindDate(unwindData); ValidateIncomeValueDate(unwindData, td); } + else if (eventType == (int)SwapEventTypeEnum.平仓) + { + // 审核提交保存待审核事件前执行平仓阶段的新风控,需确认时先返回前端,不创建待审核事件。 + riskTrialResult = CheckCloseRisk(unwindData, confirmation); + if (!riskTrialResult.Passed) + { + return riskTrialResult; + } + } unwindData.SwapRealizedPnL = unwindData.SwapCloseAmount; // 前端按"占期初(original)"语义传 ClosePercent(A);后端全链路按"占剩余(remaining)"语义(B)消费。 // 入口统一转换为 B,落库展示用的 A 由 SaveSwapDealInternal 还原。 @@ -1863,7 +1895,34 @@ namespace YLErp.Modules.SwapModule }); } }); + return riskTrialResult; } + + /// + /// 执行互换交易平仓审核时点的新风控试算。 + /// + /// 包含本次平仓日期和交易ID的平仓请求。 + /// 新风控二次确认信息;首次提交传空。 + /// 包含阻断、审批、提示及试算记录ID的新风控结果。 + /// 平仓请求为空。 + private RiskTrialResult CheckCloseRisk(UnwindData unwindData, RiskTrialConfirmation confirmation) + { + if (unwindData == null) + { + throw new ServiceException("平仓信息不能为空"); + } + + const string triggerPoint = "CLOSE_REVIEW"; + const int closeTrialSource = 2; + var riskContext = new RiskContext + { + TradeId = unwindData.SwapTradeId, + TriggerPoint = triggerPoint, + UnwindDate = unwindData.UnwindDate + }; + return new RiskTrialService(this).CheckRisk(riskContext, closeTrialSource, confirmation); + } + private void ValidateIncomeValueDate(UnwindData unwindData, trade td) { var maxIncomeValueDate = GetMaxIncomeValueDate(td).Date; diff --git a/YLErpWeb/Controllers/SwapTrade2Controller.cs b/YLErpWeb/Controllers/SwapTrade2Controller.cs index 717ad13f..0307fff2 100644 --- a/YLErpWeb/Controllers/SwapTrade2Controller.cs +++ b/YLErpWeb/Controllers/SwapTrade2Controller.cs @@ -1,4 +1,4 @@ -using Autofac.Core; +using Autofac.Core; using BaseOUDAL; using CsvHelper; using DocumentFormat.OpenXml.Spreadsheet; @@ -13,6 +13,8 @@ using YLErp.DBModels; using YLErp.DBModels.Consts; using YLErp.Enums; using YLErp.Model.Enum; +using YLErp.Modules.RiskEngine; +using YLErp.Modules.RiskModule; using YLErp.Modules.SalesModule; using YLErp.Modules.SwapModule; using YLErp.Modules.SwapModule.Dto; @@ -300,12 +302,13 @@ namespace YLErp.Web.Controllers /// ///单标的 平仓 /// - /// - /// - public JsonResult SwapUnwindJson(UnwindData unwindData) + /// 本次单标的平仓数据。 + /// 首次新风控试算记录ID;二次确认时传入。 + /// 平仓结果或新风控确认信息。 + public JsonResult SwapUnwindJson(UnwindData unwindData, int? trialDataId = null) { - new SwapDealService(CurUser).SwapUnwind(unwindData); - return JsonSuccess("平仓成功"); + var result = new SwapDealService(CurUser).SwapUnwind(unwindData, CreateRiskTrialConfirmation(trialDataId)); + return BuildCloseRiskResult(result, "平仓成功"); } /// ///多空组合 平仓 @@ -340,13 +343,97 @@ namespace YLErp.Web.Controllers /// /// 互换/平仓提交申请 /// - /// - /// - /// - public JsonResult ApplyUnwind(UnwindData unwindData, int eventType) + /// 本次互换或平仓数据。 + /// 事件类型。 + /// 首次新风控试算记录ID;平仓二次确认时传入。 + /// 提交结果或新风控确认信息。 + public JsonResult ApplyUnwind(UnwindData unwindData, int eventType, int? trialDataId = null) { - new SwapDealService(CurUser).ApplySwapTrade(unwindData, eventType); - return JsonSuccess("提交成功"); + var result = new SwapDealService(CurUser).ApplySwapTrade(unwindData, eventType, CreateRiskTrialConfirmation(trialDataId)); + return BuildCloseRiskResult(result, "提交成功"); + } + + /// + /// 保存平仓风控特批说明,不改变首次试算时间。 + /// + /// 平仓风控试算记录ID。 + /// 用户填写的特批说明。 + /// 保存结果。 + public JsonResult SaveCloseRiskTrialRemark(int trialDataId, string remark) + { + try + { + var trial = new QuotaMonitorService(CurUser) + .SaveCloseRiskTrialRemark(trialDataId, remark); + new TradeRiskCheckLogService(CurUser).AddLog(trial); + return JsonSuccess(); + } + catch (Exception ex) + { + LogFactory.GetLogger("SaveCloseRiskTrialRemark").Error(ex); + return JsonError("保存平仓风控试算说明失败!"); + } + } + + /// + /// 根据首次试算记录ID创建平仓新风控二次确认参数。 + /// + /// 首次新风控试算记录ID。 + /// 首次提交返回空,二次确认返回包含有效期的确认参数。 + private static RiskTrialConfirmation CreateRiskTrialConfirmation(int? trialDataId) + { + if (!trialDataId.HasValue) + { + return null; + } + + var expireSeconds = 300; + var expireSecondsConfig = AppManager.GetAppConfigValue("ProjectConfig", "Trade.RiskWarningConfirmExpireSeconds"); + if (!string.IsNullOrWhiteSpace(expireSecondsConfig) + && int.TryParse(expireSecondsConfig, out var configuredExpireSeconds) + && configuredExpireSeconds > 0) + { + expireSeconds = configuredExpireSeconds; + } + return new RiskTrialConfirmation + { + TrialDataId = trialDataId.Value, + ExpireSeconds = expireSeconds + }; + } + + /// + /// 将平仓新风控结果转换为控制器统一JSON响应。 + /// + /// 新风控试算结果;互换事件不执行平仓风控时为空。 + /// 业务执行成功后的提示。 + /// 阻断、二次确认或业务成功响应。 + private JsonResult BuildCloseRiskResult(RiskTrialResult result, string successMessage) + { + if (result == null || result.Passed) + { + return JsonSuccess(successMessage, result?.ShowTip == true ? new { result.TrialDataId, result.Message } : null); + } + if (result.Blocked) + { + // 风控阻断属于可预期的业务结果,返回成功协议供前端打开只读试算详情,不进入通用请求失败分支。 + return JsonSuccessData(new + { + proccessType = "QuotaTrialError", + result.TrialDataId, + message = string.IsNullOrWhiteSpace(result.Message) + ? "平仓风控校验未通过" + : result.Message + }); + } + return JsonSuccessData(new + { + proccessType = "AdditionalProcessing", + source = "RiskWarning", + type = "RiskWarningConfirm", + result.TrialDataId, + message = result.ConfirmationExpired ? $"原风控确认已超时,请重新确认。{result.Message}" : result.Message + }); } /// /// 框架合约保存 diff --git a/YLErpWeb/wwwroot/Scripts/app/swaptrade/unwindSwapTrade.js b/YLErpWeb/wwwroot/Scripts/app/swaptrade/unwindSwapTrade.js index c7fd23ff..20884c3a 100644 --- a/YLErpWeb/wwwroot/Scripts/app/swaptrade/unwindSwapTrade.js +++ b/YLErpWeb/wwwroot/Scripts/app/swaptrade/unwindSwapTrade.js @@ -370,22 +370,72 @@ const vue = new Vue({ postUrl = "/swaptrade2/ApplyUnwind"; postData.eventType = 2;//互换3,平仓2 } - main.confirm(msg, - function () { - //重新计算百分比 - var thisObj2 = thisObj; - main.post(postUrl, postData).done(function (res) { - if (res.success) { - thisObj2.closetrade_cashWindow(); + // 提交平仓并处理新风控阻断、二次确认和成功提示。 + var submitClose = function (trialDataId) { + var requestData = _.cloneDeep(postData); + if (trialDataId) { + requestData.trialDataId = trialDataId; + } + main.post(postUrl, requestData).done(function (res) { + var riskData = res.obj; + if (riskData && riskData.proccessType === "QuotaTrialError") { + // 禁止类规则只展示试算详情,不允许继续提交平仓。 + if (riskData.TrialDataId) { + layer.open({ + type: 2, + title: "风控试算详情", + shadeClose: false, + shade: 0.4, + area: ['800px', '500px'], + content: "/trade/showQuotaTrial?id=" + riskData.TrialDataId, + btn: ["关闭"] + }); } - else { - try { - thisObj2.closetrade_cashWindow(); - } catch (e) { + else if (res.msg) { + main.message(res.msg); + } + return; + } + if (res.success && riskData && riskData.proccessType === "AdditionalProcessing" && riskData.TrialDataId) { + // 审批类规则由用户填写说明并确认,二次提交仅回传后端生成的试算记录ID。 + var riskTrialLayerIndex = layer.open({ + type: 2, + title: "风控试算详情", + shadeClose: false, + shade: 0.4, + area: ['800px', '500px'], + content: "/trade/showQuotaTrial?id=" + riskData.TrialDataId, + btn: ["交易特批", "取消"], + yes: function (index) { + var trialPage = window["layui-layer-iframe" + index].page; + if (!trialPage.Data.Remark || trialPage.Data.Remark.length <= 0) { + main.message("必须填写说明内容,才可以提交平仓"); + return; + } + // 平仓使用专用接口且只提交记录ID和说明,避免客户端覆盖试算来源或刷新首次试算时间。 + main.post("/SwapTrade2/SaveCloseRiskTrialRemark", { + trialDataId: riskData.TrialDataId, + remark: trialPage.Data.Remark + }).done(function () { + layer.close(riskTrialLayerIndex); + submitClose(riskData.TrialDataId); + }); } + }); + return; + } + if (res.success) { + // 提示类规则不阻断平仓,成功后展示本次风控提示。 + if (riskData && riskData.TrialDataId && riskData.Message) { + main.message(riskData.Message); } - }); + thisObj.closetrade_cashWindow(); + } }); + }; + main.confirm(msg, function () { + submitClose(); + }); }, getSumbitText: function () { return g_isShowReCheckClose ? "审核提交" : "保存"; From 4b154455077d939295b10407404c2a7fa0f0c674 Mon Sep 17 00:00:00 2001 From: ruisu Date: Thu, 6 Aug 2026 17:08:20 +0800 Subject: [PATCH 02/24] =?UTF-8?q?feat=E6=96=B0=E5=A2=9E=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- YLErpDAL/Modules/RiskEngine/测试用例.md | 134 +++++++++++++++++------- 1 file changed, 94 insertions(+), 40 deletions(-) diff --git a/YLErpDAL/Modules/RiskEngine/测试用例.md b/YLErpDAL/Modules/RiskEngine/测试用例.md index 2eb3b5fe..a268de5b 100644 --- a/YLErpDAL/Modules/RiskEngine/测试用例.md +++ b/YLErpDAL/Modules/RiskEngine/测试用例.md @@ -2180,17 +2180,16 @@ WHERE t.id = @TradeId; ## 19. 规则 8 查询结果排查 SQL -规则 8:支付日为银行间交易日(本地)。用于核对交易平仓窗口的支付日期是否为银行间交易日;若支付日期未落在 IB 日历的非交易日列表中,则命中。 +规则 8:支付日为银行间交易日(本地)。用于核对互换交易-交易查看-交易平仓窗口中本次提交的支付日期是否为银行间交易日;若支付日期未落在 IB 日历的非交易日列表中,则命中。 取数流程: ```text -1. 根据 TradeId 查 swap_flow_event。 -2. 限定 SwapTradeId = TradeId、EventType = 2、DataState <> 0,取平仓事件。 -3. 取 swap_flow_event.PayDate,作为交易平仓窗口的支付日期。 -4. 根据 PayDate.Value.Year 查询 calendar 表中 Country = 'IB' 的银行间日历。 -5. calendar.HolidayJson 存储该年非交易日,格式为 yyyy,MM,dd。 -6. 若 HolidayJson 不包含支付日期对应的 yyyy,MM,dd,则说明支付日期是银行间交易日,命中规则。 +1. 用户从互换交易-交易查看进入交易平仓窗口。 +2. 取交易平仓窗口本次提交的支付日期,即 UnwindData.PayDate。 +3. 根据 PayDate.Value.Year 查询 calendar 表中 Country = 'IB' 的银行间日历。 +4. calendar.HolidayJson 存储该年非交易日,格式为 yyyy,MM,dd。 +5. 若 HolidayJson 不包含支付日期对应的 yyyy,MM,dd,则说明支付日期是银行间交易日,命中规则。 ``` 规则公式: @@ -2202,10 +2201,9 @@ WHERE t.id = @TradeId; 规则字段口径: ```text -支付日期:swap_flow_event.PayDate,对应交易平仓窗口的支付日期 -平仓事件:swap_flow_event.EventType = 2 +支付日期:UnwindData.PayDate,对应互换交易-交易查看-交易平仓窗口的支付日期 银行间日历:calendar.Country = 'IB' -日历年份:calendar.Year = swap_flow_event.PayDate.Year +日历年份:calendar.Year = UnwindData.PayDate.Year 非交易日:calendar.HolidayJson ``` @@ -2216,6 +2214,17 @@ WHERE t.id = @TradeId; ``` +变量 Roslyn 示例:变量名为“平仓支付日期为银行间交易日”,DataType 为 Bool;规则前端配置“平仓支付日期为银行间交易日 == true”。该变量必须使用本次平仓请求中的 PayDate,不能查询 swap_flow_event 历史平仓事件,否则首次提交和修改支付日期后的试算会取不到当前页面值。 + +```csharp +if (!PayDate.HasValue) + throw new Exception("平仓支付日期为空"); + +return new RiskVariableValueDetail( + RiskCalendarHelper.IsInterbankTradingDay(DbContext, PayDate.Value), + $"交易ID {TradeId},本次平仓支付日期为{PayDate.Value:yyyy-MM-dd}"); +``` + 注释规则定义: ```csharp @@ -2223,8 +2232,8 @@ WHERE t.id = @TradeId; //{ // Id = 1000008, // RuleName = "支付日为银行间交易日(本地)", -// RuleText = "取值字段:通过 DbContext.swap_flow_event 按 SwapTradeId=TradeId、EventType=2、DataState<>0 取平仓事件的 PayDate,PayDate 对应交易平仓窗口的支付日期;通过 DbContext.calendar 按 Country='IB' 且 Year=PayDate.Year 取银行间日历,HolidayJson 存储该年非交易日。计算逻辑:若支付日期对应的 yyyy,MM,dd 不存在于 IB 日历 HolidayJson 中,则说明支付日期是银行间交易日,触发审批。", -// RuleExpr = "DbContext.swap_flow_event.Any(e => e.SwapTradeId == TradeId && e.EventType == 2 && e.DataState != 0 && e.PayDate.HasValue) && !DbContext.calendar.First(c => c.Country == \"IB\" && c.Year == DbContext.swap_flow_event.Where(e => e.SwapTradeId == TradeId && e.EventType == 2 && e.DataState != 0 && e.PayDate.HasValue).OrderByDescending(e => e.id).First().PayDate.Value.Year && c.ValidState != \"InValid\").HolidayJson.Contains(DbContext.swap_flow_event.Where(e => e.SwapTradeId == TradeId && e.EventType == 2 && e.DataState != 0 && e.PayDate.HasValue).OrderByDescending(e => e.id).First().PayDate.Value.ToString(\"yyyy,MM,dd\"))", +// RuleText = "取值字段:取互换交易-交易查看-交易平仓窗口本次提交的 UnwindData.PayDate,PayDate 对应页面支付日期;通过 DbContext.calendar 按 Country='IB' 且 Year=PayDate.Year 取银行间日历,HolidayJson 存储该年非交易日。计算逻辑:若支付日期对应的 yyyy,MM,dd 不存在于 IB 日历 HolidayJson 中,则说明支付日期是银行间交易日,触发审批。", +// RuleExpr = "PayDate.HasValue && RiskCalendarHelper.IsInterbankTradingDay(DbContext, PayDate.Value)", // Version = 1, // Status = RiskRuleStatus.Active, // OptId = 0, @@ -2236,6 +2245,8 @@ WHERE t.id = @TradeId; //}); ``` +变量值核对 SQL:用于核对已落库平仓事件的支付日期是否为银行间交易日;首次提交前的页面值应以请求中的 UnwindData.PayDate 为准,不能只依赖该 SQL。 + ```sql SET @TradeId = 3001699; @@ -2274,33 +2285,54 @@ WHERE t.id = @TradeId; ## 20. 规则 9 查询结果排查 SQL -规则 9:到期日为银行间交易日(本地)。用于核对互换交易界面的到期日是否为银行间交易日;若到期日未落在 IB 日历的非交易日列表中,则命中。 +规则 9:到期日为银行间交易日(本地)。用于核对新增互换交易的到期日期是否为银行间交易日;若到期日期未落在 IB 日历的非交易日列表中,则命中。 取数流程: ```text -1. 根据 TradeId 查当前 trade。 -2. 取 trade.ExerciseDate,作为互换交易界面的到期日。 -3. 根据 ExerciseDate.Value.Year 查询 calendar 表中 Country = 'IB' 的银行间日历。 -4. calendar.HolidayJson 存储该年非交易日,格式为 yyyy,MM,dd。 -5. 若 HolidayJson 不包含到期日对应的 yyyy,MM,dd,则说明到期日是银行间交易日,命中规则。 +1. 根据 TradeId 查 swap_position。 +2. 限定 SwapTradeId = TradeId、IsInitial = 1,取新增互换交易生成的期初持仓。 +3. 取 swap_position.PosiMatuirityDate,作为新增互换交易的到期日期。 +4. 根据 PosiMatuirityDate.Value.Year 查询 calendar 表中 Country = 'IB' 的银行间日历。 +5. calendar.HolidayJson 存储该年非交易日,格式为 yyyy,MM,dd。 +6. 若 HolidayJson 不包含到期日期对应的 yyyy,MM,dd,则说明到期日期是银行间交易日,命中规则。 ``` 规则公式: ```text -到期日 ∉ IB 日历非交易日 +到期日期 ∉ IB 日历非交易日 ``` 规则字段口径: ```text -到期日:trade.ExerciseDate,对应互换交易界面的到期日 +到期日期:swap_position.PosiMatuirityDate,对应新增互换交易的到期日期 +期初持仓:swap_position.IsInitial = 1 银行间日历:calendar.Country = 'IB' -日历年份:calendar.Year = trade.ExerciseDate.Year +日历年份:calendar.Year = swap_position.PosiMatuirityDate.Year 非交易日:calendar.HolidayJson ``` +变量 Roslyn 示例:变量名为“互换到期日期为银行间交易日”,DataType 为 Bool;规则前端配置“互换到期日期为银行间交易日 == true”。该变量取新增互换交易生成的期初持仓到期日期,即 swap_position.PosiMatuirityDate。 + +```csharp +var maturityDate = DbContext.swap_position + .Where(p => p.SwapTradeId == TradeId + && p.IsInitial + && p.PosiMatuirityDate.HasValue) + .OrderBy(p => p.id) + .Select(p => p.PosiMatuirityDate) + .FirstOrDefault(); + +if (!maturityDate.HasValue) + throw new Exception("互换到期日期为空"); + +return new RiskVariableValueDetail( + RiskCalendarHelper.IsInterbankTradingDay(DbContext, maturityDate.Value), + $"交易ID {TradeId},互换到期日期为{maturityDate.Value:yyyy-MM-dd}"); +``` + 注释规则定义: ```csharp @@ -2308,8 +2340,8 @@ WHERE t.id = @TradeId; //{ // Id = 1000009, // RuleName = "到期日为银行间交易日(本地)", -// RuleText = "取值字段:通过 DbContext.trade 按 TradeId 取当前交易的 ExerciseDate,ExerciseDate 对应互换交易界面的到期日;通过 DbContext.calendar 按 Country='IB' 且 Year=ExerciseDate.Year 取银行间日历,HolidayJson 存储该年非交易日。计算逻辑:若到期日对应的 yyyy,MM,dd 不存在于 IB 日历 HolidayJson 中,则说明到期日是银行间交易日,触发审批。", -// RuleExpr = "DbContext.trade.First(t => t.id == TradeId).ExerciseDate.HasValue && !DbContext.calendar.First(c => c.Country == \"IB\" && c.Year == DbContext.trade.First(t => t.id == TradeId).ExerciseDate.Value.Year && c.ValidState != \"InValid\").HolidayJson.Contains(DbContext.trade.First(t => t.id == TradeId).ExerciseDate.Value.ToString(\"yyyy,MM,dd\"))", +// RuleText = "取值字段:通过 DbContext.swap_position 按 SwapTradeId=TradeId、IsInitial=true 取新增互换交易生成的期初持仓 PosiMatuirityDate,PosiMatuirityDate 对应新增互换交易的到期日期;通过 DbContext.calendar 按 Country='IB' 且 Year=PosiMatuirityDate.Year 取银行间日历,HolidayJson 存储该年非交易日。计算逻辑:若到期日期对应的 yyyy,MM,dd 不存在于 IB 日历 HolidayJson 中,则说明到期日期是银行间交易日,触发审批。", +// RuleExpr = "DbContext.swap_position.Any(p => p.SwapTradeId == TradeId && p.IsInitial && p.PosiMatuirityDate.HasValue) && RiskCalendarHelper.IsInterbankTradingDay(DbContext, DbContext.swap_position.Where(p => p.SwapTradeId == TradeId && p.IsInitial && p.PosiMatuirityDate.HasValue).OrderBy(p => p.id).First().PosiMatuirityDate.Value)", // Version = 1, // Status = RiskRuleStatus.Active, // OptId = 0, @@ -2327,19 +2359,30 @@ SET @TradeId = 3001699; SELECT t.id AS TradeId, t.TradeType, - t.ExerciseDate AS MaturityDate, + sp.id AS SwapPositionId, + sp.IsInitial, + sp.PosiMatuirityDate AS MaturityDate, c.Country AS CalendarCountry, c.Year AS CalendarYear, - DATE_FORMAT(t.ExerciseDate, '%Y,%m,%d') AS MaturityDateText, + DATE_FORMAT(sp.PosiMatuirityDate, '%Y,%m,%d') AS MaturityDateText, CASE - WHEN t.ExerciseDate IS NOT NULL - AND c.HolidayJson NOT LIKE CONCAT('%', DATE_FORMAT(t.ExerciseDate, '%Y,%m,%d'), '%') THEN 1 + WHEN sp.PosiMatuirityDate IS NOT NULL + AND c.HolidayJson NOT LIKE CONCAT('%', DATE_FORMAT(sp.PosiMatuirityDate, '%Y,%m,%d'), '%') THEN 1 ELSE 0 END AS IsMaturityDateIBTradingDay FROM trade t +LEFT JOIN ( + SELECT * + FROM swap_position + WHERE SwapTradeId = @TradeId + AND IsInitial = 1 + AND PosiMatuirityDate IS NOT NULL + ORDER BY id + LIMIT 1 +) sp ON sp.SwapTradeId = t.id LEFT JOIN calendar c ON c.Country = 'IB' - AND c.Year = YEAR(t.ExerciseDate) + AND c.Year = YEAR(sp.PosiMatuirityDate) AND c.ValidState <> 'InValid' WHERE t.id = @TradeId; ``` @@ -2348,17 +2391,16 @@ WHERE t.id = @TradeId; ## 21. 规则 10 查询结果排查 SQL -规则 10:平仓日为银行间交易日(本地)。用于核对交易平仓窗口的平仓日期是否为银行间交易日;若平仓日期未落在 IB 日历的非交易日列表中,则命中。 +规则 10:平仓日为银行间交易日(本地)。用于核对互换交易-交易查看-交易平仓窗口中本次提交的平仓日期是否为银行间交易日;若平仓日期未落在 IB 日历的非交易日列表中,则命中。 取数流程: ```text -1. 根据 TradeId 查 swap_flow_event。 -2. 限定 SwapTradeId = TradeId、EventType = 2、DataState <> 0,取平仓事件。 -3. 取 swap_flow_event.UnwindDate,作为交易平仓窗口的平仓日期。 -4. 根据 UnwindDate.Value.Year 查询 calendar 表中 Country = 'IB' 的银行间日历。 -5. calendar.HolidayJson 存储该年非交易日,格式为 yyyy,MM,dd。 -6. 若 HolidayJson 不包含平仓日期对应的 yyyy,MM,dd,则说明平仓日期是银行间交易日,命中规则。 +1. 用户从互换交易-交易查看进入交易平仓窗口。 +2. 取交易平仓窗口本次提交的平仓日期,即 UnwindData.UnwindDate。 +3. 根据 UnwindDate.Value.Year 查询 calendar 表中 Country = 'IB' 的银行间日历。 +4. calendar.HolidayJson 存储该年非交易日,格式为 yyyy,MM,dd。 +5. 若 HolidayJson 不包含平仓日期对应的 yyyy,MM,dd,则说明平仓日期是银行间交易日,命中规则。 ``` 规则公式: @@ -2370,10 +2412,9 @@ WHERE t.id = @TradeId; 规则字段口径: ```text -平仓日期:swap_flow_event.UnwindDate,对应交易平仓窗口的平仓日期 -平仓事件:swap_flow_event.EventType = 2 +平仓日期:UnwindData.UnwindDate,对应互换交易-交易查看-交易平仓窗口的平仓日期 银行间日历:calendar.Country = 'IB' -日历年份:calendar.Year = swap_flow_event.UnwindDate.Year +日历年份:calendar.Year = UnwindData.UnwindDate.Year 非交易日:calendar.HolidayJson ``` @@ -2384,6 +2425,17 @@ WHERE t.id = @TradeId; ``` +变量 Roslyn 示例:变量名为“平仓日期为银行间交易日”,DataType 为 Bool;规则前端配置“平仓日期为银行间交易日 == true”。该变量必须使用本次平仓请求中的 UnwindDate,不能查询 swap_flow_event 历史平仓事件,否则首次提交和修改平仓日期后的试算会取不到当前页面值。 + +```csharp +if (!UnwindDate.HasValue) + throw new Exception("平仓日期为空"); + +return new RiskVariableValueDetail( + RiskCalendarHelper.IsInterbankTradingDay(DbContext, UnwindDate.Value), + $"交易ID {TradeId},本次平仓日期为{UnwindDate.Value:yyyy-MM-dd}"); +``` + 注释规则定义: ```csharp @@ -2391,8 +2443,8 @@ WHERE t.id = @TradeId; //{ // Id = 1000010, // RuleName = "平仓日为银行间交易日(本地)", -// RuleText = "取值字段:通过 DbContext.swap_flow_event 按 SwapTradeId=TradeId、EventType=2、DataState<>0 取平仓事件的 UnwindDate,UnwindDate 对应交易平仓窗口的平仓日期;通过 DbContext.calendar 按 Country='IB' 且 Year=UnwindDate.Year 取银行间日历,HolidayJson 存储该年非交易日。计算逻辑:若平仓日期对应的 yyyy,MM,dd 不存在于 IB 日历 HolidayJson 中,则说明平仓日期是银行间交易日,触发审批。", -// RuleExpr = "DbContext.swap_flow_event.Any(e => e.SwapTradeId == TradeId && e.EventType == 2 && e.DataState != 0 && e.UnwindDate.HasValue) && !DbContext.calendar.First(c => c.Country == \"IB\" && c.Year == DbContext.swap_flow_event.Where(e => e.SwapTradeId == TradeId && e.EventType == 2 && e.DataState != 0 && e.UnwindDate.HasValue).OrderByDescending(e => e.id).First().UnwindDate.Value.Year && c.ValidState != \"InValid\").HolidayJson.Contains(DbContext.swap_flow_event.Where(e => e.SwapTradeId == TradeId && e.EventType == 2 && e.DataState != 0 && e.UnwindDate.HasValue).OrderByDescending(e => e.id).First().UnwindDate.Value.ToString(\"yyyy,MM,dd\"))", +// RuleText = "取值字段:取互换交易-交易查看-交易平仓窗口本次提交的 UnwindData.UnwindDate,UnwindDate 对应页面平仓日期;通过 DbContext.calendar 按 Country='IB' 且 Year=UnwindDate.Year 取银行间日历,HolidayJson 存储该年非交易日。计算逻辑:若平仓日期对应的 yyyy,MM,dd 不存在于 IB 日历 HolidayJson 中,则说明平仓日期是银行间交易日,触发审批。", +// RuleExpr = "UnwindDate.HasValue && RiskCalendarHelper.IsInterbankTradingDay(DbContext, UnwindDate.Value)", // Version = 1, // Status = RiskRuleStatus.Active, // OptId = 0, @@ -2404,6 +2456,8 @@ WHERE t.id = @TradeId; //}); ``` +变量值核对 SQL:用于核对已落库平仓事件的平仓日期是否为银行间交易日;首次提交前的页面值应以请求中的 UnwindData.UnwindDate 为准,不能只依赖该 SQL。 + ```sql SET @TradeId = 3001699; From 0722da1149b32ed8d6745e3ced3911db627792b6 Mon Sep 17 00:00:00 2001 From: ruisu Date: Fri, 14 Aug 2026 15:14:32 +0800 Subject: [PATCH 03/24] =?UTF-8?q?feat=EF=BC=9A=E5=A2=9E=E5=8A=A0=E5=80=BA?= =?UTF-8?q?=E5=88=B8=E5=80=9F=E8=B4=B7=E8=B4=B9=E7=8E=87=E8=A1=A8=E7=9A=84?= =?UTF-8?q?=E5=86=85=E5=AD=98=E8=AF=BB=E5=8F=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DBModels/eod_bond_lending_rate.cs | 66 +++++++++++++++++++ YLErpDAL/DataBase/YLContext.cs | 1 + .../EodPriceQueryService.cs | 30 +++++++++ 3 files changed, 97 insertions(+) create mode 100644 Framework/YLErp.Core/DBModels/eod_bond_lending_rate.cs diff --git a/Framework/YLErp.Core/DBModels/eod_bond_lending_rate.cs b/Framework/YLErp.Core/DBModels/eod_bond_lending_rate.cs new file mode 100644 index 00000000..e1b9c54e --- /dev/null +++ b/Framework/YLErp.Core/DBModels/eod_bond_lending_rate.cs @@ -0,0 +1,66 @@ +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + +namespace YLErp.DBModels +{ + [Table("eod_bond_lending_rate")] + public class eod_bond_lending_rate + { + [Key] + public long id { get; set; } + + [DisplayName("业务唯一代码")] + public string RecordCode { get; set; } + + [DisplayName("业务日期")] + public DateTime ValueDate { get; set; } + + [DisplayName("标的债券代码")] + public string UnderlyingSecurityId { get; set; } + + [DisplayName("标的债券名称")] + public string UnderlyingSymbol { get; set; } + + [DisplayName("前收盘费率(%)")] + public decimal? PreCloseRate { get; set; } + + [DisplayName("前加权平均费率(%)")] + public decimal? PreWeightedAvgRate { get; set; } + + [DisplayName("开盘费率(%)")] + public decimal? OpenRate { get; set; } + + [DisplayName("最新费率(%)")] + public decimal? LatestRate { get; set; } + + [DisplayName("最高费率(%)")] + public decimal? HighRate { get; set; } + + [DisplayName("最低费率(%)")] + public decimal? LowRate { get; set; } + + [DisplayName("收盘费率(%)")] + public decimal? CloseRate { get; set; } + + [DisplayName("加权平均费率(%)")] + public decimal? WeightedAvgRate { get; set; } + + [DisplayName("成交量(元)")] + public decimal? TurnoverAmount { get; set; } + + [DisplayName("操作人ID")] + public int OptId { get; set; } + + [DisplayName("操作人名称")] + public string OptName { get; set; } + + [DisplayName("操作时间")] + public DateTime OptDate { get; set; } + + [DisplayName("数据来源")] + public string DataSource { get; set; } + + [DisplayName("源行情时间")] + public string SourceTime { get; set; } + } +} diff --git a/YLErpDAL/DataBase/YLContext.cs b/YLErpDAL/DataBase/YLContext.cs index 78936a0c..d5c8a160 100644 --- a/YLErpDAL/DataBase/YLContext.cs +++ b/YLErpDAL/DataBase/YLContext.cs @@ -255,6 +255,7 @@ namespace YLErp.BLL public DbSet eod_trade_risk_hedgevol_s { get; set; } public DbSet eod_trade_risk_openvol_s { get; set; } public DbSet eod_currency_rate { get; set; } + public DbSet eod_bond_lending_rate { get; set; } public DbSet Stock_BlackWhite { get; set; } public DbSet SalesCommissionInfo { get; set; } public DbSet SalesCommissionDetail { get; set; } diff --git a/YLErpDAL/Modules/DataProviderModule/EodPriceQueryService.cs b/YLErpDAL/Modules/DataProviderModule/EodPriceQueryService.cs index 7792e5e1..5b30494f 100644 --- a/YLErpDAL/Modules/DataProviderModule/EodPriceQueryService.cs +++ b/YLErpDAL/Modules/DataProviderModule/EodPriceQueryService.cs @@ -269,6 +269,36 @@ namespace YLErp.Modules.DataProviderModule return bondPrice; } /// + /// 获取债券借贷费率最新行情 + /// + /// + /// + /// + public static eod_bond_lending_rate GetBondLendingRate(DateTime valueDate, string underlyingSecurityId) + { + if (string.IsNullOrWhiteSpace(underlyingSecurityId)) + { + return null; + } + + using var db = DbContextFactory.GetYLDbContext(); + return db.eod_bond_lending_rate + .Where(x => x.UnderlyingSecurityId == underlyingSecurityId && x.ValueDate <= valueDate.Date) + .OrderByDescending(x => x.ValueDate) + .FirstOrDefault(); + } + /// + /// 尝试获取债券借贷费率最新行情 + /// + /// + /// + /// + /// + public static bool TryGetBondLendingRate(DateTime valueDate, string underlyingSecurityId, out eod_bond_lending_rate bondLendingRate) + { + return (bondLendingRate = GetBondLendingRate(valueDate, underlyingSecurityId)) != null; + } + /// /// 获取标的收盘价格 /// /// 标的代码 From f2a1598d1de3df99ae640fe961bb50816b0bdb85 Mon Sep 17 00:00:00 2001 From: ruisu Date: Fri, 14 Aug 2026 15:16:36 +0800 Subject: [PATCH 04/24] =?UTF-8?q?feat=EF=BC=9A=E5=A2=9E=E5=8A=A0=E5=B9=B3?= =?UTF-8?q?=E4=BB=93=E6=89=80=E9=9C=80=E9=A3=8E=E6=8E=A7=E4=B8=8A=E4=B8=8B?= =?UTF-8?q?=E6=96=87=E8=A6=81=E7=B4=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- YLErpDAL/Modules/RiskEngine/Compile/RuleCompiler.cs | 3 +++ YLErpDAL/Modules/RiskEngine/RiskContext.cs | 2 ++ YLErpDAL/Modules/RiskEngine/RiskRuleService.cs | 10 ++++------ YLErpDAL/Modules/SwapModule/SwapDealService.cs | 3 ++- 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/YLErpDAL/Modules/RiskEngine/Compile/RuleCompiler.cs b/YLErpDAL/Modules/RiskEngine/Compile/RuleCompiler.cs index 0890d97e..c5a5fc68 100644 --- a/YLErpDAL/Modules/RiskEngine/Compile/RuleCompiler.cs +++ b/YLErpDAL/Modules/RiskEngine/Compile/RuleCompiler.cs @@ -31,6 +31,8 @@ namespace YLErp.Modules.RiskEngine /// public DateTime? UnwindDate { get; set; } + public DateTime? PayDate { get; set; } + /// /// 数据库上下文,供规则公式直接查询数据库 /// @@ -402,6 +404,7 @@ namespace YLErp.Modules.RiskEngine TradeId = ctx.TradeId, TriggerPoint = ctx.TriggerPoint, UnwindDate = ctx.UnwindDate, + PayDate = ctx.PayDate, DbContext = ctx.DbContext }; return runner(globals).GetAwaiter().GetResult(); diff --git a/YLErpDAL/Modules/RiskEngine/RiskContext.cs b/YLErpDAL/Modules/RiskEngine/RiskContext.cs index a87f9f7c..7a86b0a1 100644 --- a/YLErpDAL/Modules/RiskEngine/RiskContext.cs +++ b/YLErpDAL/Modules/RiskEngine/RiskContext.cs @@ -22,6 +22,8 @@ namespace YLErp.Modules.RiskEngine /// public DateTime? UnwindDate { get; set; } + public DateTime? PayDate { get; set; } + /// /// 数据库上下文,供规则公式直接查询数据库 /// diff --git a/YLErpDAL/Modules/RiskEngine/RiskRuleService.cs b/YLErpDAL/Modules/RiskEngine/RiskRuleService.cs index 6cd51d3e..295a5f18 100644 --- a/YLErpDAL/Modules/RiskEngine/RiskRuleService.cs +++ b/YLErpDAL/Modules/RiskEngine/RiskRuleService.cs @@ -202,8 +202,7 @@ namespace YLErp.Modules.RiskEngine "BOOK_CONFIRM", "CLOSE_REVIEW", "UPLOAD_CONFIRMATION", - "EVENT_TRIGGER", - "FUND_PAYMENT" + "EVENT_TRIGGER" }; @@ -792,11 +791,10 @@ namespace YLErp.Modules.RiskEngine private static readonly Dictionary TriggerPointCnMap = new Dictionary { - ["BOOK_CONFIRM"] = "交易录入确认", - ["CLOSE_REVIEW"] = "平仓审核", + ["BOOK_CONFIRM"] = "簿记交易确认", + ["CLOSE_REVIEW"] = "平仓审核提交", ["UPLOAD_CONFIRMATION"] = "上传确认书", - ["EVENT_TRIGGER"] = "事件触发", - ["FUND_PAYMENT"] = "资金支付" + ["EVENT_TRIGGER"] = "事件发生时" }; /// diff --git a/YLErpDAL/Modules/SwapModule/SwapDealService.cs b/YLErpDAL/Modules/SwapModule/SwapDealService.cs index 45dd3142..2ef85c63 100644 --- a/YLErpDAL/Modules/SwapModule/SwapDealService.cs +++ b/YLErpDAL/Modules/SwapModule/SwapDealService.cs @@ -1918,7 +1918,8 @@ namespace YLErp.Modules.SwapModule { TradeId = unwindData.SwapTradeId, TriggerPoint = triggerPoint, - UnwindDate = unwindData.UnwindDate + UnwindDate = unwindData.UnwindDate, + PayDate = unwindData.PayDate }; return new RiskTrialService(this).CheckRisk(riskContext, closeTrialSource, confirmation); } From f14b35c7a53b58baffe874bb509a2c0494261986 Mon Sep 17 00:00:00 2001 From: ruisu Date: Fri, 14 Aug 2026 15:19:14 +0800 Subject: [PATCH 05/24] =?UTF-8?q?feat:=E4=BC=98=E5=8C=96=E6=96=B0=E9=A3=8E?= =?UTF-8?q?=E6=8E=A7=E7=8B=AC=E7=AB=8B=E6=A8=A1=E5=9D=97=E9=80=BB=E8=BE=91?= =?UTF-8?q?=EF=BC=8C=E5=A2=9E=E5=8A=A0=E5=AF=B9=E4=BA=8C=E6=AC=A1=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C=E2=80=9D=E6=8F=90=E7=A4=BA=E2=80=9C=E5=9C=BA=E6=99=AF?= =?UTF-8?q?=E7=9A=84=E6=94=BE=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Modules/RiskEngine/RiskTrialService.cs | 55 +++++++++++++------ 1 file changed, 38 insertions(+), 17 deletions(-) diff --git a/YLErpDAL/Modules/RiskEngine/RiskTrialService.cs b/YLErpDAL/Modules/RiskEngine/RiskTrialService.cs index 442c84ed..ccabf681 100644 --- a/YLErpDAL/Modules/RiskEngine/RiskTrialService.cs +++ b/YLErpDAL/Modules/RiskEngine/RiskTrialService.cs @@ -53,24 +53,33 @@ namespace YLErp.Modules.RiskEngine } var riskResult = new RiskEngineService(this).EvaluateRisk(context, context.TriggerPoint); + // 与交易确认流程保持一致:二次确认放行范围包含“需审批”和“提示”,避免已确认过的提示规则重复弹出。 var currentApprovalRules = riskResult.TriggeredRules .Where(rule => rule.ControlStrategy == RiskControlStrategy.Approval) .ToList(); + var currentTipRules = riskResult.TriggeredRules + .Where(rule => rule.ControlStrategy == RiskControlStrategy.ShowTip) + .ToList(); + // 二次提交时,若首次试算记录有效,则剔除已确认过的审批和提示规则;记录过期或上下文不匹配时重新展示全部当前命中的审批和提示规则。 var pendingApprovalRules = confirmationExpired ? currentApprovalRules : currentApprovalRules.Where(rule => !confirmedRuleIds.Contains(rule.RuleId)).ToList(); - var trial = CreateQuotaTrial(context, trialSource, riskResult, pendingApprovalRules); + var pendingTipRules = confirmationExpired + ? currentTipRules + : currentTipRules.Where(rule => !confirmedRuleIds.Contains(rule.RuleId)).ToList(); + var trial = CreateQuotaTrial(context, trialSource, riskResult, pendingApprovalRules, pendingTipRules); + // 目前复用 quotaTrial 承载风控试算结果,兼容交易确认、平仓等现有详情页和二次确认流程;后续若表语义收敛,再考虑统一重命名为风控试算。 new Modules.RiskModule.QuotaMonitorService(this).SaveQuotaTrial(trial); var result = new RiskTrialResult { Blocked = riskResult.Blocked, NeedApproval = pendingApprovalRules.Any(), - ShowTip = riskResult.ShowTip, + ShowTip = pendingTipRules.Any(), ConfirmationExpired = confirmationExpired, TrialDataId = trial.id, Message = trial.RiskWarningDetails, - ApprovalRuleIds = pendingApprovalRules + ApprovalRuleIds = pendingApprovalRules.Concat(pendingTipRules) .Select(rule => rule.RuleId) .Where(ruleId => !string.IsNullOrWhiteSpace(ruleId)) .Distinct() @@ -83,7 +92,7 @@ namespace YLErp.Modules.RiskEngine } /// - /// 校验二次确认记录,并恢复首次试算中已确认的审批规则ID。 + /// 校验二次确认记录,并恢复首次试算中已确认的审批和提示规则ID。 /// private bool TryGetConfirmedRuleIds(RiskContext context, int trialSource, RiskTrialConfirmation confirmation, ISet confirmedRuleIds) { @@ -106,7 +115,7 @@ namespace YLErp.Modules.RiskEngine return false; } - foreach (var ruleId in ParseApprovalRuleIds(trial.RiskWarningDetails)) + foreach (var ruleId in ParseConfirmedRuleIds(trial.RiskWarningDetails)) { confirmedRuleIds.Add(ruleId); } @@ -125,21 +134,21 @@ namespace YLErp.Modules.RiskEngine } /// - /// 从系统生成的审批规则明细中恢复规则ID,避免直接信任前端提交的放行规则列表。 + /// 从系统生成的审批和提示规则明细中恢复规则ID,避免直接信任前端提交的放行规则列表。 /// - private static IEnumerable ParseApprovalRuleIds(string details) + private static IEnumerable ParseConfirmedRuleIds(string details) { - const string approvalTitle = "[风控引擎] 规则触发:需审批"; const string ruleIdPrefix = "规则ID:"; - var inApprovalSection = false; + var inConfirmableSection = false; foreach (var line in (details ?? string.Empty).Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries)) { if (line.StartsWith("[风控引擎] 规则触发:", StringComparison.Ordinal)) { - inApprovalSection = line.StartsWith(approvalTitle, StringComparison.Ordinal); + inConfirmableSection = line.StartsWith("[风控引擎] 规则触发:需审批", StringComparison.Ordinal) + || line.StartsWith("[风控引擎] 规则触发:提示", StringComparison.Ordinal); continue; } - if (!inApprovalSection) + if (!inConfirmableSection) { continue; } @@ -162,7 +171,7 @@ namespace YLErp.Modules.RiskEngine /// /// 将新风控引擎结果转换为现有试算记录,供详情页面和二次确认复用。 /// - private QuotaTrial CreateQuotaTrial(RiskContext context, int trialSource, RiskResult riskResult, IReadOnlyCollection pendingApprovalRules) + private QuotaTrial CreateQuotaTrial(RiskContext context, int trialSource, RiskResult riskResult, IReadOnlyCollection pendingApprovalRules, IReadOnlyCollection pendingTipRules) { // 业务入口已通过Find加载交易,优先复用当前上下文跟踪的实体,避免重复查询数据库。 var trade = DbContext.trade.Local.FirstOrDefault(item => item.id == context.TradeId) @@ -178,9 +187,9 @@ namespace YLErp.Modules.RiskEngine : pendingApprovalRules.Any() ? QuotaTrialStatusEnum.RiskWarning : QuotaTrialStatusEnum.Success, NewRiskBlocked = riskResult.Blocked, NewRiskNeedApproval = pendingApprovalRules.Any(), - RiskWarningDetails = BuildRiskDetails(context, riskResult, pendingApprovalRules) + RiskWarningDetails = BuildRiskDetails(context, riskResult, pendingApprovalRules, pendingTipRules) }; - trial.ApprovalRuleIds = pendingApprovalRules + trial.ApprovalRuleIds = pendingApprovalRules.Concat(pendingTipRules) .Select(rule => rule.RuleId) .Where(ruleId => !string.IsNullOrWhiteSpace(ruleId)) .Distinct() @@ -191,7 +200,7 @@ namespace YLErp.Modules.RiskEngine /// /// 按控制策略生成与现有试算详情页面兼容的规则明细。 /// - private static string BuildRiskDetails(RiskContext context, RiskResult riskResult, IReadOnlyCollection pendingApprovalRules) + private static string BuildRiskDetails(RiskContext context, RiskResult riskResult, IReadOnlyCollection pendingApprovalRules, IReadOnlyCollection pendingTipRules) { var lines = new List { @@ -199,7 +208,7 @@ namespace YLErp.Modules.RiskEngine }; AppendRuleDetails(lines, "禁止", riskResult.TriggeredRules.Where(rule => rule.ControlStrategy == RiskControlStrategy.Block)); AppendRuleDetails(lines, "需审批", pendingApprovalRules); - AppendRuleDetails(lines, "提示", riskResult.TriggeredRules.Where(rule => rule.ControlStrategy == RiskControlStrategy.ShowTip)); + AppendRuleDetails(lines, "提示", pendingTipRules); return string.Join("\n", lines); } @@ -208,7 +217,19 @@ namespace YLErp.Modules.RiskEngine /// private static string BuildRequestContext(RiskContext context) { - return $"[风控引擎] 请求上下文:触发点:{context.TriggerPoint ?? string.Empty};平仓日期:{context.UnwindDate?.Date:yyyy-MM-dd}"; + return $"[风控引擎] 请求上下文:触发点:{GetTriggerPointDisplayName(context.TriggerPoint)};平仓日期:{context.UnwindDate?.Date:yyyy-MM-dd};支付日期:{context.PayDate?.Date:yyyy-MM-dd}"; + } + + private static string GetTriggerPointDisplayName(string triggerPoint) + { + return triggerPoint switch + { + "BOOK_CONFIRM" => "簿记交易确认", + "CLOSE_REVIEW" => "平仓审核提交", + "UPLOAD_CONFIRMATION" => "上传确认书", + "EVENT_TRIGGER" => "事件发生时", + _ => triggerPoint ?? string.Empty + }; } /// From f41411485dbce57ef5592d7b422a260bec1e8d84 Mon Sep 17 00:00:00 2001 From: ruisu Date: Fri, 14 Aug 2026 15:19:53 +0800 Subject: [PATCH 06/24] =?UTF-8?q?feat:=E5=A2=9E=E5=8A=A0=E9=A3=8E=E6=8E=A7?= =?UTF-8?q?=E7=94=A8=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- YLErpDAL/Modules/RiskEngine/测试用例.md | 872 +++++++++++++++++++++--- 1 file changed, 779 insertions(+), 93 deletions(-) diff --git a/YLErpDAL/Modules/RiskEngine/测试用例.md b/YLErpDAL/Modules/RiskEngine/测试用例.md index a268de5b..67f25636 100644 --- a/YLErpDAL/Modules/RiskEngine/测试用例.md +++ b/YLErpDAL/Modules/RiskEngine/测试用例.md @@ -2214,7 +2214,20 @@ WHERE t.id = @TradeId; ``` -变量 Roslyn 示例:变量名为“平仓支付日期为银行间交易日”,DataType 为 Bool;规则前端配置“平仓支付日期为银行间交易日 == true”。该变量必须使用本次平仓请求中的 PayDate,不能查询 swap_flow_event 历史平仓事件,否则首次提交和修改支付日期后的试算会取不到当前页面值。 +变量配置:规则 8 需要同时准备日期变量和布尔判断变量,规则前端配置时使用“平仓支付日期为银行间交易日 isTrue”;如果需要与平仓日期组合比较,可使用“平仓支付日期”日期变量。 + +变量 1:平仓支付日期,Category 为 BookingElement,DataType 为 Date,ValueDomain 为 yyyy-MM-dd。该变量必须使用本次平仓请求中的 PayDate,不能查询 swap_flow_event 历史平仓事件,否则首次提交和修改支付日期后的试算会取不到当前页面值。 + +```csharp +if (!PayDate.HasValue) + throw new Exception("平仓支付日期为空"); + +return new RiskVariableValueDetail( + PayDate.Value.Date, + $"交易ID {TradeId},本次平仓支付日期为{PayDate.Value:yyyy-MM-dd}"); +``` + +变量 2:平仓支付日期为银行间交易日,Category 为 BooleanCheck,DataType 为 Boolean,ValueDomain 为 true/false。 ```csharp if (!PayDate.HasValue) @@ -2285,17 +2298,18 @@ WHERE t.id = @TradeId; ## 20. 规则 9 查询结果排查 SQL -规则 9:到期日为银行间交易日(本地)。用于核对新增互换交易的到期日期是否为银行间交易日;若到期日期未落在 IB 日历的非交易日列表中,则命中。 +规则 9:到期日为银行间交易日(本地)。用于核对新增互换交易页面本次提交的到期日期是否为银行间交易日;若到期日期未落在 IB 日历的非交易日列表中,则命中。到期日期指 swapTradeEdit.js 中绑定的 trade.ExerciseDate。 取数流程: ```text -1. 根据 TradeId 查 swap_position。 -2. 限定 SwapTradeId = TradeId、IsInitial = 1,取新增互换交易生成的期初持仓。 -3. 取 swap_position.PosiMatuirityDate,作为新增互换交易的到期日期。 -4. 根据 PosiMatuirityDate.Value.Year 查询 calendar 表中 Country = 'IB' 的银行间日历。 -5. calendar.HolidayJson 存储该年非交易日,格式为 yyyy,MM,dd。 -6. 若 HolidayJson 不包含到期日期对应的 yyyy,MM,dd,则说明到期日期是银行间交易日,命中规则。 +1. 前端互换交易编辑页 swapTradeEdit.js 使用 trade.ExerciseDate 作为到期日期。 +2. 新增互换交易提交后,后端交易模型承接为 trade.ExerciseDate。 +3. 确认成交触发风控时,初始 swap_position 已由 trade.ExerciseDate 生成,读取 swap_position.PosiMatuirityDate。 +4. 限定 SwapTradeId = TradeId、IsInitial = 1、Invalid = 0、PosiMatuirityDate 不为空,按 id 取第一条初始持仓。 +5. 根据 PosiMatuirityDate.Value.Year 查询 calendar 表中 Country = 'IB' 的银行间日历。 +6. calendar.HolidayJson 存储该年非交易日,格式为 yyyy,MM,dd。 +7. 若 HolidayJson 不包含到期日期对应的 yyyy,MM,dd,则说明到期日期是银行间交易日,命中规则。 ``` 规则公式: @@ -2307,19 +2321,43 @@ WHERE t.id = @TradeId; 规则字段口径: ```text -到期日期:swap_position.PosiMatuirityDate,对应新增互换交易的到期日期 -期初持仓:swap_position.IsInitial = 1 +到期日期:swapTradeEdit.js 的 trade.ExerciseDate,对应新增互换交易页面的“到期日期” +确认成交风控取值:swap_position.PosiMatuirityDate,由 Trade.ExerciseDate 生成 +初始持仓:swap_position.SwapTradeId = TradeId、IsInitial = 1、Invalid = 0 银行间日历:calendar.Country = 'IB' 日历年份:calendar.Year = swap_position.PosiMatuirityDate.Year 非交易日:calendar.HolidayJson ``` -变量 Roslyn 示例:变量名为“互换到期日期为银行间交易日”,DataType 为 Bool;规则前端配置“互换到期日期为银行间交易日 == true”。该变量取新增互换交易生成的期初持仓到期日期,即 swap_position.PosiMatuirityDate。 +变量配置:规则 9 需要同时准备日期变量和布尔判断变量,规则前端配置时使用“互换到期日期为银行间交易日 isTrue”;如果需要与成交日、起始日组合比较,可使用“互换到期日期”日期变量。 + +变量 1:互换到期日期,Category 为 BookingElement,DataType 为 Date,ValueDomain 为 yyyy-MM-dd。确认成交触发点使用 swap_position.PosiMatuirityDate,需限定初始有效持仓,避免后续互换/平仓产生的非初始持仓干扰。 ```csharp var maturityDate = DbContext.swap_position .Where(p => p.SwapTradeId == TradeId && p.IsInitial + && !p.Invalid + && p.PosiMatuirityDate.HasValue) + .OrderBy(p => p.id) + .Select(p => p.PosiMatuirityDate) + .FirstOrDefault(); + +if (!maturityDate.HasValue) + throw new Exception("互换到期日期为空"); + +return new RiskVariableValueDetail( + maturityDate.Value.Date, + $"交易ID {TradeId},本次互换到期日期为{maturityDate.Value:yyyy-MM-dd}"); +``` + +变量 2:互换到期日期为银行间交易日,Category 为 BooleanCheck,DataType 为 Boolean,ValueDomain 为 true/false。 + +```csharp +var maturityDate = DbContext.swap_position + .Where(p => p.SwapTradeId == TradeId + && p.IsInitial + && !p.Invalid && p.PosiMatuirityDate.HasValue) .OrderBy(p => p.id) .Select(p => p.PosiMatuirityDate) @@ -2330,7 +2368,7 @@ if (!maturityDate.HasValue) return new RiskVariableValueDetail( RiskCalendarHelper.IsInterbankTradingDay(DbContext, maturityDate.Value), - $"交易ID {TradeId},互换到期日期为{maturityDate.Value:yyyy-MM-dd}"); + $"交易ID {TradeId},本次互换到期日期为{maturityDate.Value:yyyy-MM-dd}"); ``` 注释规则定义: @@ -2340,8 +2378,8 @@ return new RiskVariableValueDetail( //{ // Id = 1000009, // RuleName = "到期日为银行间交易日(本地)", -// RuleText = "取值字段:通过 DbContext.swap_position 按 SwapTradeId=TradeId、IsInitial=true 取新增互换交易生成的期初持仓 PosiMatuirityDate,PosiMatuirityDate 对应新增互换交易的到期日期;通过 DbContext.calendar 按 Country='IB' 且 Year=PosiMatuirityDate.Year 取银行间日历,HolidayJson 存储该年非交易日。计算逻辑:若到期日期对应的 yyyy,MM,dd 不存在于 IB 日历 HolidayJson 中,则说明到期日期是银行间交易日,触发审批。", -// RuleExpr = "DbContext.swap_position.Any(p => p.SwapTradeId == TradeId && p.IsInitial && p.PosiMatuirityDate.HasValue) && RiskCalendarHelper.IsInterbankTradingDay(DbContext, DbContext.swap_position.Where(p => p.SwapTradeId == TradeId && p.IsInitial && p.PosiMatuirityDate.HasValue).OrderBy(p => p.id).First().PosiMatuirityDate.Value)", +// RuleText = "取值字段:确认成交触发点下初始 swap_position 已由 trade.ExerciseDate 生成,通过 DbContext.swap_position 按 SwapTradeId=TradeId、IsInitial=true、Invalid=false 取 PosiMatuirityDate,PosiMatuirityDate 对应 swapTradeEdit.js 页面上的到期日期;通过 DbContext.calendar 按 Country='IB' 且 Year=PosiMatuirityDate.Year 取银行间日历,HolidayJson 存储该年非交易日。计算逻辑:若到期日期对应的 yyyy,MM,dd 不存在于 IB 日历 HolidayJson 中,则说明到期日期是银行间交易日,触发审批。", +// RuleExpr = "DbContext.swap_position.Any(p => p.SwapTradeId == TradeId && p.IsInitial && !p.Invalid && p.PosiMatuirityDate.HasValue) && RiskCalendarHelper.IsInterbankTradingDay(DbContext, DbContext.swap_position.Where(p => p.SwapTradeId == TradeId && p.IsInitial && !p.Invalid && p.PosiMatuirityDate.HasValue).OrderBy(p => p.id).First().PosiMatuirityDate.Value)", // Version = 1, // Status = RiskRuleStatus.Active, // OptId = 0, @@ -2359,8 +2397,10 @@ SET @TradeId = 3001699; SELECT t.id AS TradeId, t.TradeType, + t.ExerciseDate AS TradeExerciseDate, sp.id AS SwapPositionId, sp.IsInitial, + sp.Invalid, sp.PosiMatuirityDate AS MaturityDate, c.Country AS CalendarCountry, c.Year AS CalendarYear, @@ -2376,6 +2416,7 @@ LEFT JOIN ( FROM swap_position WHERE SwapTradeId = @TradeId AND IsInitial = 1 + AND Invalid = 0 AND PosiMatuirityDate IS NOT NULL ORDER BY id LIMIT 1 @@ -2425,7 +2466,20 @@ WHERE t.id = @TradeId; ``` -变量 Roslyn 示例:变量名为“平仓日期为银行间交易日”,DataType 为 Bool;规则前端配置“平仓日期为银行间交易日 == true”。该变量必须使用本次平仓请求中的 UnwindDate,不能查询 swap_flow_event 历史平仓事件,否则首次提交和修改平仓日期后的试算会取不到当前页面值。 +变量配置:规则 10 需要同时准备日期变量和布尔判断变量,规则前端配置时使用“平仓日期为银行间交易日 isTrue”;如果需要与支付日期组合比较,可使用“平仓日期”日期变量。 + +变量 1:平仓日期,Category 为 BookingElement,DataType 为 Date,ValueDomain 为 yyyy-MM-dd。该变量必须使用本次平仓请求中的 UnwindDate,不能查询 swap_flow_event 历史平仓事件,否则首次提交和修改平仓日期后的试算会取不到当前页面值。 + +```csharp +if (!UnwindDate.HasValue) + throw new Exception("平仓日期为空"); + +return new RiskVariableValueDetail( + UnwindDate.Value.Date, + $"交易ID {TradeId},本次平仓日期为{UnwindDate.Value:yyyy-MM-dd}"); +``` + +变量 2:平仓日期为银行间交易日,Category 为 BooleanCheck,DataType 为 Boolean,ValueDomain 为 true/false。 ```csharp if (!UnwindDate.HasValue) @@ -3515,22 +3569,27 @@ ORDER BY ## 27. 规则 16 查询结果排查 SQL -规则 16:多头支付固定端利率偏离(本地)。用于核对利息端收入固定利息方向的点差百分比绝对值是否大于阈值。 +规则 16:多头支付固定端利率偏离(本地)。用于核对多头浮动端对应利息端点差百分比绝对值是否大于阈值,利息端不按 InterestDirection 区分收取或支付。 取数流程: ```text 1. 根据 TradeId 查 swap_position。 -2. 限定 InterestDirection=1,取固定利息端收取方向记录。 -3. 从该利息端记录取 InterestRateDefault。 -4. InterestRateDefault 只代表利率文本框中 + 号后的点差,不包含 FR007 基准利率,库内为小数原值,界面按百分比显示。 -5. 计算 ABS(InterestRateDefault * 100),大于 5 时命中。 +2. 先限定 IsInitial=1、Invalid=0、PosiDirection>0、PositionType=1,取多头浮动端记录。 +3. 若不存在多头浮动端记录,说明当前 trade 不适用规则16,变量返回 0,不触发风控。 +4. 再取同一 TradeId、同为初始有效、PosiDirection=0、PositionType=0、UnderlyingCode 为空、InterestMode=9 的利息端记录,不按 InterestDirection 区分收取或支付。 +5. 该识别口径来自当前建仓保存逻辑:浮动端记录会赋值 PosiDirection、PositionType、UnderlyingCode;普通利息端记录单独创建,InterestMode 设置为 9(标的期初全价),只赋值 InterestDirection、InterestRateDefault、InterestMode、FloatRateUnderlyingCode 等利息字段,未赋值浮动端字段时落库为默认的 0、0、空;保证金/预付金记录用 InterestMode=5 或 6,不纳入规则16利息端。 +6. 从该利息端记录取 InterestRateDefault 和 FloatRateUnderlyingCode。 +7. InterestRateDefault 只代表利率文本框中 + 号后的点差,不包含 FR007 基准利率,库内为小数原值,界面按百分比显示。 +8. 基准利率保护:FloatRateUnderlyingCode 必须为 FR007;为空或不是 FR007 时,说明规则16的 FR007 抵消前提不成立,抛异常触发风控报警。 +9. 所有普通利息端都要检查;若存在基准利率非法记录,异常信息同时列出基准利率非法记录,以及已满足 FR007 的记录偏离明细,避免只看到第一类问题。 +10. 若基准利率全部为 FR007,则逐条计算 ABS(InterestRateDefault * 100),取最大值与规则阈值比较;同时返回逐条明细,由结构化执行器按当前规则阈值拆分展示超限记录和未超限记录。 ``` 规则公式: ```text -ABS(利息端.InterestRateDefault * 100) > 5 +存在多头浮动端时,逐条检查普通利息端;若 FloatRateUnderlyingCode 为空或不是 FR007,则抛异常触发风控报警,异常信息同时列出基准利率非法记录和已满足 FR007 的记录偏离明细;若基准利率全部为 FR007,则取 ABS(InterestRateDefault * 100) 的最大值与阈值比较,并由结构化执行器按规则阈值拆分展示超限记录和未超限记录;不存在多头浮动端时返回 0,不触发 ``` 注释规则定义: @@ -3540,8 +3599,8 @@ ABS(利息端.InterestRateDefault * 100) > 5 //{ // Id = 1000016, // RuleName = "多头支付固定端利率偏离(本地)", -// RuleText = "取值字段:通过 DbContext.swap_position 按 TradeId 取利息端收入固定利息方向记录的 InterestRateDefault。InterestRateDefault 只代表利率文本框中 + 号后的点差,不包含 FR007 基准利率。计算逻辑:按 ABS(InterestRateDefault) 计算点差绝对值,绝对值小于 5% 时触发审批。", -// RuleExpr = "Math.Abs(DbContext.swap_position.First(p => p.SwapTradeId == TradeId && p.InterestDirection == 1).InterestRateDefault)*100m > 5m", +// RuleText = "取值字段:通过 DbContext.swap_position 按 TradeId 先取 IsInitial=true、Invalid=false、PosiDirection>0、PositionType=1 的多头浮动端记录;若不存在多头浮动端记录,说明当前 trade 不适用规则16,变量返回 0,不触发风控;若存在多头浮动端记录,再取同一 TradeId、同为初始有效、PosiDirection=0、PositionType=0、UnderlyingCode 为空、InterestMode=9 的普通利息端记录,不按 InterestDirection 区分收取或支付,排除 InterestMode=5/6 的保证金/预付金记录。InterestRateDefault 只代表利率文本框中 + 号后的点差,不包含 FR007 基准利率。基准利率保护:FloatRateUnderlyingCode 必须为 FR007;为空或不是 FR007 时,说明规则16的 FR007 抵消前提不成立,抛异常触发风控报警,异常信息同时列出基准利率非法记录和已满足 FR007 的记录偏离明细。计算逻辑:基准利率全部校验通过后,按 ABS(InterestRateDefault * 100) 计算点差百分比绝对值,取最大值与阈值比较;变量明细逐条返回偏离值,结构化执行器按规则阈值拆分展示超限记录和未超限记录。", +// RuleExpr = "DbContext.swap_position.Any(p => p.SwapTradeId == TradeId && p.IsInitial && !p.Invalid && p.PosiDirection > 0 && p.PositionType == 1) && !DbContext.swap_position.Where(p => p.SwapTradeId == TradeId && p.IsInitial && !p.Invalid && p.PosiDirection == 0 && p.PositionType == 0 && string.IsNullOrEmpty(p.UnderlyingCode) && p.InterestMode == 9).Any(p => string.IsNullOrEmpty(p.FloatRateUnderlyingCode) || p.FloatRateUnderlyingCode != \"FR007\") && DbContext.swap_position.Where(p => p.SwapTradeId == TradeId && p.IsInitial && !p.Invalid && p.PosiDirection == 0 && p.PositionType == 0 && string.IsNullOrEmpty(p.UnderlyingCode) && p.InterestMode == 9).Max(p => Math.Abs(p.InterestRateDefault * 100m)) > 5m", // Version = 1, // Status = RiskRuleStatus.Active, // OptId = 0, @@ -3555,113 +3614,265 @@ ABS(利息端.InterestRateDefault * 100) > 5 变量形式: -变量名:固定端利率偏离绝对值 +变量名:多头支付固定端利率偏离值 DataType:Numeric -规则配置:固定端利率偏离绝对值 > 阈值(示例 5) +规则配置:多头支付固定端利率偏离值 > 阈值(示例 5) 变量取值表达式: ```csharp +var longFloatItems = DbContext.swap_position + .Where(p => p.SwapTradeId == TradeId + && p.IsInitial + && !p.Invalid + && p.PosiDirection > 0 + && p.PositionType == 1) + .Select(p => new { p.id }) + .ToList(); + +if (!longFloatItems.Any()) + return new RiskVariableValueDetail( + 0m, + $"交易ID {TradeId} 不存在多头浮动端记录,规则16不适用,不触发风控"); + var interestItems = DbContext.swap_position .Where(p => p.SwapTradeId == TradeId - && p.InterestDirection == 1) + && p.IsInitial + && !p.Invalid + && p.PosiDirection == 0 + && p.PositionType == 0 + && string.IsNullOrEmpty(p.UnderlyingCode) + && p.InterestMode == 9) .Select(p => new { p.id, + p.InterestMode, + p.InterestDirection, + p.FloatRateUnderlyingCode, p.InterestRateDefault, InterestRateDeviation = Math.Abs(p.InterestRateDefault * 100m) }) .ToList(); if (!interestItems.Any()) - throw new Exception("利息端收取方向记录不存在"); + throw new Exception("同次录入的利息端记录不存在"); -var maxDeviationItem = interestItems +var invalidFloatRateItems = interestItems + .Where(p => string.IsNullOrEmpty(p.FloatRateUnderlyingCode) || p.FloatRateUnderlyingCode != "FR007") + .ToList(); + +if (invalidFloatRateItems.Any()) +{ + var invalidFloatRateMessage = "基准利率不合法记录:" + string.Join(";", invalidFloatRateItems + .OrderBy(p => p.id) + .Select(p => $"记录ID为{p.id},基准利率为{(string.IsNullOrEmpty(p.FloatRateUnderlyingCode) ? "空" : p.FloatRateUnderlyingCode)}")); + + var validDeviationItems = interestItems + .Where(p => p.FloatRateUnderlyingCode == "FR007") + .OrderByDescending(p => p.InterestRateDeviation) + .ThenBy(p => p.id) + .ToList(); + + var validDeviationMessage = validDeviationItems.Any() + ? ";FR007记录偏离明细:" + string.Join(";", validDeviationItems.Select(p => $"记录ID为{p.id},点差为{p.InterestRateDefault * 100m:0.#########}%,偏离绝对值为{p.InterestRateDeviation:0.#########}%,收支方向为{(p.InterestDirection == 1 ? "收取" : p.InterestDirection == 2 ? "支付" : "未知:" + p.InterestDirection)}")) + : string.Empty; + + throw new Exception($"基准利率保护触发:规则16要求基准利率必须为FR007。{invalidFloatRateMessage}{validDeviationMessage}"); +} + +var orderedInterestItems = interestItems .OrderByDescending(p => p.InterestRateDeviation) .ThenBy(p => p.id) - .First(); + .ToList(); + +var maxDeviationItem = orderedInterestItems.First(); + +var interestDetails = orderedInterestItems + .Select(p => new RiskVariableValueDetailItem( + p.InterestRateDeviation, + $"记录ID为{p.id},基准利率为{(string.IsNullOrEmpty(p.FloatRateUnderlyingCode) ? "空" : p.FloatRateUnderlyingCode)},点差为{p.InterestRateDefault * 100m:0.#########}%,偏离绝对值为{p.InterestRateDeviation:0.#########}%,收支方向为{(p.InterestDirection == 1 ? "收取" : p.InterestDirection == 2 ? "支付" : "未知:" + p.InterestDirection)}")) + .ToList(); return new RiskVariableValueDetail( maxDeviationItem.InterestRateDeviation, - $"交易ID {TradeId},利息端记录ID为{maxDeviationItem.id},点差为{maxDeviationItem.InterestRateDefault * 100m:0.#########}%,最大偏离绝对值为{maxDeviationItem.InterestRateDeviation:0.#########}%"); + $"交易ID {TradeId},多头浮动端记录ID为{string.Join("、", longFloatItems.Select(p => p.id))},普通利息端共{orderedInterestItems.Count}条,最大偏离绝对值为{maxDeviationItem.InterestRateDeviation:0.#########}%", + interestDetails); ``` -汇总 SQL:与变量一样取全部符合条件记录中的最大偏离值;命中说明只展示产生最大偏离值的记录。 +汇总 SQL:先确认存在多头浮动端,再按同次录入普通利息端记录取最大偏离值用于规则比较;若存在基准利率为空或不是 FR007 的记录则实际执行时会抛异常触发风控报警,SQL 中单独列出此类记录数供排查。 ```sql SET @TradeId = 3001699; SET @Threshold = 5; SELECT - MAX(ABS(sp.InterestRateDefault * 100)) AS MaxInterestRateDeviation, CASE - WHEN MAX(ABS(sp.InterestRateDefault * 100)) > @Threshold THEN 1 + WHEN COUNT(DISTINCT fp.id) = 0 THEN NULL + ELSE MAX(ABS(ip.InterestRateDefault * 100)) + END AS MaxInterestRateDeviation, + CASE + WHEN COUNT(DISTINCT fp.id) = 0 THEN 0 + WHEN MAX(ABS(ip.InterestRateDefault * 100)) > @Threshold THEN 1 + ELSE 0 + END AS IsGreaterThanThreshold, + SUM(CASE WHEN ip.FloatRateUnderlyingCode IS NULL OR ip.FloatRateUnderlyingCode = '' OR ip.FloatRateUnderlyingCode <> 'FR007' THEN 1 ELSE 0 END) AS InvalidFloatRateCodeCount +FROM swap_position fp +LEFT JOIN swap_position ip + ON ip.SwapTradeId = fp.SwapTradeId + AND ip.IsInitial = fp.IsInitial + AND ip.Invalid = fp.Invalid + AND ip.PosiDirection = 0 + AND ip.PositionType = 0 + AND (ip.UnderlyingCode IS NULL OR ip.UnderlyingCode = '') + AND ip.InterestMode = 9 +WHERE fp.SwapTradeId = @TradeId + AND fp.IsInitial = 1 + AND fp.Invalid = 0 + AND fp.PosiDirection > 0 + AND fp.PositionType = 1; +``` + +明细 SQL:用于排查多头浮动端及其同次录入普通利息端记录;按偏离绝对值倒序展示所有纳入变量计算的普通利息端记录,基准利率为空或不是 FR007 的记录会标记 IsProtectionTrigger=1,实际执行时抛异常触发风控报警。 + +```sql +SET @TradeId = 3001699; +SET @Threshold = 5; + +SELECT + fp.id AS FloatPositionId, + ip.id AS InterestPositionId, + fp.SwapTradeId, + fp.IsInitial, + fp.Invalid, + fp.PosiDirection, + fp.PositionType, + ip.InterestMode, + ip.InterestDirection, + ip.FloatRateUnderlyingCode, + CASE + WHEN ip.FloatRateUnderlyingCode IS NULL OR ip.FloatRateUnderlyingCode = '' OR ip.FloatRateUnderlyingCode <> 'FR007' THEN 1 + ELSE 0 + END AS IsProtectionTrigger, + ip.InterestRateDefault, + ip.InterestRateDefault * 100 AS InterestRateDefault_100, + ABS(ip.InterestRateDefault * 100) AS DiffAbs, + CASE + WHEN ABS(ip.InterestRateDefault * 100) > @Threshold THEN 1 ELSE 0 END AS IsGreaterThanThreshold -FROM swap_position sp -WHERE sp.SwapTradeId = @TradeId - AND sp.InterestDirection = 1; +FROM swap_position fp +LEFT JOIN swap_position ip + ON ip.SwapTradeId = fp.SwapTradeId + AND ip.IsInitial = fp.IsInitial + AND ip.Invalid = fp.Invalid + AND ip.PosiDirection = 0 + AND ip.PositionType = 0 + AND (ip.UnderlyingCode IS NULL OR ip.UnderlyingCode = '') + AND ip.InterestMode = 9 +WHERE fp.SwapTradeId = @TradeId + AND fp.IsInitial = 1 + AND fp.Invalid = 0 + AND fp.PosiDirection > 0 + AND fp.PositionType = 1 +ORDER BY DiffAbs DESC, ip.id ASC; ``` -明细 SQL:用于排查全部利息端记录;变量命中说明只展示产生最大偏离值的记录。 +异常排查 SQL:用于排查变量执行失败“同次录入的利息端记录不存在”。重点看是否存在多头浮动端,以及是否存在同一 TradeId 下初始有效、PosiDirection=0、PositionType=0、UnderlyingCode 为空、InterestMode=9 的普通利息端记录;InterestMode=5/6 为保证金/预付金,不应计入规则16利息端。 ```sql SET @TradeId = 3001699; -SET @Threshold = 5; SELECT - sp.id AS SwapPositionId, + '当前交易初始有效持仓概览' AS CheckItem, + sp.id, sp.SwapTradeId, + sp.IsInitial, + sp.Invalid, + sp.PosiDirection, + sp.PositionType, + CASE sp.PositionType + WHEN 1 THEN '多头' + WHEN 2 THEN '空头' + ELSE CONCAT('未知:', sp.PositionType) + END AS PositionTypeName, + sp.InterestMode, + CASE sp.InterestMode + WHEN 5 THEN '初始预付金' + WHEN 6 THEN '追加预付金' + WHEN 9 THEN '标的期初全价' + ELSE CONCAT('未知:', sp.InterestMode) + END AS InterestModeName, sp.InterestDirection, + CASE sp.InterestDirection + WHEN 1 THEN '收取' + WHEN 2 THEN '支付' + ELSE CONCAT('未知:', sp.InterestDirection) + END AS InterestDirectionName, + sp.UnderlyingCode, + sp.FloatRateUnderlyingCode, sp.InterestRateDefault, sp.InterestRateDefault * 100 AS InterestRateDefault_100, - ABS(sp.InterestRateDefault * 100) AS DiffAbs, - CASE - WHEN ABS(sp.InterestRateDefault * 100) > @Threshold THEN 1 - ELSE 0 - END AS IsGreaterThanThreshold + ABS(sp.InterestRateDefault * 100) AS DiffAbs FROM swap_position sp WHERE sp.SwapTradeId = @TradeId - AND sp.InterestDirection = 1 -ORDER BY DiffAbs DESC, sp.id ASC; + AND sp.IsInitial = 1 + AND sp.Invalid = 0 +ORDER BY + sp.PosiDirection DESC, + sp.PositionType, + sp.InterestDirection, + sp.id; + +SELECT + SUM(CASE WHEN sp.PosiDirection > 0 AND sp.PositionType = 1 THEN 1 ELSE 0 END) AS LongFloatCount, + SUM(CASE WHEN sp.PosiDirection = 0 AND sp.PositionType = 0 AND (sp.UnderlyingCode IS NULL OR sp.UnderlyingCode = '') AND sp.InterestMode = 9 THEN 1 ELSE 0 END) AS InterestLegCount, + SUM(CASE WHEN sp.PosiDirection = 0 AND sp.PositionType = 0 AND (sp.UnderlyingCode IS NULL OR sp.UnderlyingCode = '') AND sp.InterestMode IN (5, 6) THEN 1 ELSE 0 END) AS MarginLegCount, + SUM(CASE WHEN sp.PosiDirection = 0 AND sp.PositionType = 0 AND (sp.UnderlyingCode IS NULL OR sp.UnderlyingCode = '') AND sp.InterestMode = 9 AND sp.InterestDirection = 1 THEN 1 ELSE 0 END) AS InterestLegDirection1Count, + SUM(CASE WHEN sp.PosiDirection = 0 AND sp.PositionType = 0 AND (sp.UnderlyingCode IS NULL OR sp.UnderlyingCode = '') AND sp.InterestMode = 9 AND sp.InterestDirection = 2 THEN 1 ELSE 0 END) AS InterestLegDirection2Count, + SUM(CASE WHEN sp.PosiDirection = 0 AND sp.PositionType = 0 AND (sp.UnderlyingCode IS NULL OR sp.UnderlyingCode = '') AND sp.InterestMode = 9 AND (sp.FloatRateUnderlyingCode IS NULL OR sp.FloatRateUnderlyingCode = '' OR sp.FloatRateUnderlyingCode <> 'FR007') THEN 1 ELSE 0 END) AS InvalidFloatRateCodeCount, + CASE + WHEN SUM(CASE WHEN sp.PosiDirection > 0 AND sp.PositionType = 1 THEN 1 ELSE 0 END) = 0 + THEN '不存在多头浮动端,规则16不适用,应返回0不触发' + WHEN SUM(CASE WHEN sp.PosiDirection = 0 AND sp.PositionType = 0 AND (sp.UnderlyingCode IS NULL OR sp.UnderlyingCode = '') AND sp.InterestMode = 9 THEN 1 ELSE 0 END) = 0 + THEN '存在多头浮动端,但不存在对应普通利息端记录;需检查同次录入利息端是否满足 PosiDirection=0、PositionType=0、UnderlyingCode 为空、InterestMode=9,不能把 InterestMode=5/6 的保证金/预付金当作利息端' + WHEN SUM(CASE WHEN sp.PosiDirection = 0 AND sp.PositionType = 0 AND (sp.UnderlyingCode IS NULL OR sp.UnderlyingCode = '') AND sp.InterestMode = 9 AND (sp.FloatRateUnderlyingCode IS NULL OR sp.FloatRateUnderlyingCode = '' OR sp.FloatRateUnderlyingCode <> 'FR007') THEN 1 ELSE 0 END) > 0 + THEN '存在普通利息端基准利率为空或不是FR007,规则16应触发基准利率保护异常,不应继续计算点差偏离' + ELSE '存在多头浮动端且存在对应普通利息端记录,基准利率均为FR007,可以计算规则16偏离值;规则16不按 InterestDirection 区分收取或支付,并排除保证金/预付金记录' + END AS DiagnosticResult +FROM swap_position sp +WHERE sp.SwapTradeId = @TradeId + AND sp.IsInitial = 1 + AND sp.Invalid = 0; ``` --- -## 28. 规则 18 查询结果排查 SQL +## 28. 规则 17 查询结果排查 SQL -规则 18:账户授权收支方向不匹配(本地)。用于核对账户授权的收支方向与交易浮动端多空方向是否匹配;不符合允许场景时命中。 - -校验内容: - -```text -不符合以下场景则不通过: -1. 利息端 = 收取,且浮动端 = 空头 -2. 利息端 = 支付,且浮动端 = 多头 -``` +规则 17:空头利息端利率与借贷加权费率偏离(本地)。用于核对空头浮动端同次录入的普通利息端利率与标的借贷加权费率的偏离绝对值是否大于阈值,利息端不按 InterestDirection 区分收取或支付。 取数流程: ```text 1. 根据 TradeId 查 swap_position。 -2. 限定 IsInitial=1、Invalid=0、PosiDirection>0,取浮动端初始持仓记录。 -3. 取 swap_position.InterestDirection 作为利息端收支方向,1=收取,2=支付。 -4. 取 swap_position.PositionType 作为浮动端多空方向,1=多头,2=空头。 -5. 若不是“利息端收取且浮动端空头”,也不是“利息端支付且浮动端多头”,则命中。 +2. 先限定 IsInitial=1、Invalid=0、PosiDirection>0、PositionType=2,取空头浮动端记录,得到标的 UnderlyingCode。 +3. 若不存在空头浮动端记录,说明当前 trade 不适用规则17,变量返回 0,不触发风控。 +4. 空头浮动端标的必须为“数字.IB”或“数字.BC”格式;合法时取点号前数字作为借贷费率查询标的,其他格式抛异常触发风控报警。 +5. 再取同一 TradeId、同为初始有效、PosiDirection=0、PositionType=0、UnderlyingCode 为空、InterestMode=9 的普通利息端记录,不按 InterestDirection 区分收取或支付,排除 InterestMode=5/6 的保证金/预付金记录。 +6. 从普通利息端记录取 InterestRateDefault 和 FloatRateUnderlyingCode。 +7. InterestRateDefault 只代表利率文本框中 + 号后的点差,库内为小数原值,界面按百分比显示。 +8. 基准利率保护:FloatRateUnderlyingCode 必须为 FR007;为空或不是 FR007 时抛异常触发风控报警。 +9. 所有空头浮动端和普通利息端都要检查;若存在空头浮动端标的非法或基准利率不是 FR007 的记录,异常信息同时列出非法记录,以及合法记录组合后的偏离明细,避免只看到第一类问题。 +10. 从 eod_commodity_future_price 取该基准利率代码在 TradeDate 之前最近一条的 ReferencePrice(小数口径,如 0.025 表示 2.5%)。 +11. 从 eod_bond_lending_rate 取空头浮动端标的点号前数字在 TradeDate 之前最近一条的 WeightedAvgRate(百分比值,如 2.5 表示 2.5%)。 +12. 利息端利率(%) = (基准利率 + 点差) * 100,借贷加权费率(%) = WeightedAvgRate。 +13. 若空头浮动端标的和基准利率均合法,则对所有空头浮动端和普通利息端组合逐条计算 ABS(利息端利率(%) - 借贷加权费率(%)),取最大值与规则阈值比较;同时返回逐条明细,由结构化执行器按当前规则阈值拆分展示超限记录和未超限记录。 ``` 规则公式: ```text -NOT ((InterestDirection = 1 AND PositionType = 2) OR (InterestDirection = 2 AND PositionType = 1)) -``` - -规则字段口径: - -```text -利息端收支方向:swap_position.InterestDirection,1=收取,2=支付 -浮动端多空方向:swap_position.PositionType,1=多头,2=空头 -浮动端记录:swap_position.IsInitial=1、Invalid=0、PosiDirection>0 +存在空头浮动端时,逐条检查空头浮动端和普通利息端;若空头浮动端标的不是“数字.IB”或“数字.BC”格式,或 FloatRateUnderlyingCode 为空/不是 FR007,则抛异常触发风控报警,异常信息同时列出非法记录和合法记录组合后的偏离明细;若空头浮动端标的和基准利率均合法,则用空头浮动端标的点号前数字查借贷加权费率,并取所有空头浮动端和普通利息端组合 ABS((基准利率 + InterestRateDefault) * 100 - 借贷加权费率) 的最大值与阈值比较;变量明细逐条返回偏离值,由结构化执行器按规则阈值拆分展示超限记录和未超限记录;不存在空头浮动端时返回 0,不触发 ``` 注释规则定义: @@ -3669,10 +3880,10 @@ NOT ((InterestDirection = 1 AND PositionType = 2) OR (InterestDirection = 2 AND ```csharp //rules.Add(new RiskRule //{ -// Id = 1000018, -// RuleName = "账户授权收支方向不匹配(本地)", -// RuleText = "取值字段:通过 DbContext.swap_position 按 TradeId 取 IsInitial=true、Invalid=false、PosiDirection>0 的浮动端初始持仓记录;InterestDirection 表示利息端收支方向,1=收取、2=支付;PositionType 表示浮动端多空方向,1=多头、2=空头。计算逻辑:仅允许利息端=收取且浮动端=空头,或利息端=支付且浮动端=多头;其他组合触发审批。", -// RuleExpr = "!(((DbContext.swap_position.First(p => p.SwapTradeId == TradeId && p.IsInitial && !p.Invalid && p.PosiDirection > 0).InterestDirection == 1) && (DbContext.swap_position.First(p => p.SwapTradeId == TradeId && p.IsInitial && !p.Invalid && p.PosiDirection > 0).PositionType == 2)) || ((DbContext.swap_position.First(p => p.SwapTradeId == TradeId && p.IsInitial && !p.Invalid && p.PosiDirection > 0).InterestDirection == 2) && (DbContext.swap_position.First(p => p.SwapTradeId == TradeId && p.IsInitial && !p.Invalid && p.PosiDirection > 0).PositionType == 1)))", +// Id = 1000017, +// RuleName = "空头利息端利率与借贷加权费率偏离(本地)", +// RuleText = "取值字段:通过 DbContext.swap_position 按 TradeId 先取 IsInitial=true、Invalid=false、PosiDirection>0、PositionType=2 的空头浮动端记录;若不存在空头浮动端记录,说明当前 trade 不适用规则17,变量返回 0,不触发风控;若存在空头浮动端记录,再取同一 TradeId、同为初始有效、PosiDirection=0、PositionType=0、UnderlyingCode 为空、InterestMode=9 的普通利息端记录,不按 InterestDirection 区分收取或支付,排除 InterestMode=5/6 的保证金/预付金记录。利息端利率 = 基准利率 + 点差,基准利率取 eod_commodity_future_price 中 FloatRateUnderlyingCode 在 TradeDate 前最近一条的 ReferencePrice(小数口径);FloatRateUnderlyingCode 必须为 FR007,为空或不是 FR007 时抛异常触发风控报警,异常信息同时列出基准利率非法记录和基准利率为 FR007 的合法记录与空头浮动端组合后的偏离明细。点差为 InterestRateDefault(小数原值)。空头浮动端 UnderlyingCode 必须为“数字.IB”或“数字.BC”格式;合法时取点号前数字作为 eod_bond_lending_rate.UnderlyingSecurityId 查询 TradeDate 前最近一条 WeightedAvgRate(百分比值),其他格式抛异常触发风控报警。计算逻辑:对所有合法空头浮动端和普通利息端组合逐条按 ABS((基准利率 + 点差) * 100 - 借贷加权费率) 计算偏离绝对值,取最大值与阈值比较;变量明细逐条返回偏离值,结构化执行器按规则阈值拆分展示超限记录和未超限记录。", +// RuleExpr = "", // Version = 1, // Status = RiskRuleStatus.Active, // OptId = 0, @@ -3684,35 +3895,510 @@ NOT ((InterestDirection = 1 AND PositionType = 2) OR (InterestDirection = 2 AND //}); ``` +变量形式: + +变量名:利息端利率与借贷加权费率偏离度 +DataType:Numeric +规则配置:利息端利率与借贷加权费率偏离度 > 阈值(示例 5) + +变量取值表达式: + +```csharp +var shortFloatItems = DbContext.swap_position + .Where(p => p.SwapTradeId == TradeId + && p.IsInitial + && !p.Invalid + && p.PosiDirection > 0 + && p.PositionType == 2) + .Select(p => new { p.id, p.UnderlyingCode }) + .ToList(); + +if (!shortFloatItems.Any()) + return new RiskVariableValueDetail( + 0m, + $"交易ID {TradeId} 不存在空头浮动端记录,规则17不适用,不触发风控"); + +var invalidShortFloatItems = shortFloatItems + .Where(p => string.IsNullOrEmpty(p.UnderlyingCode) + || !(p.UnderlyingCode.EndsWith(".IB") || p.UnderlyingCode.EndsWith(".BC")) + || p.UnderlyingCode.LastIndexOf(".") <= 0 + || !p.UnderlyingCode.Substring(0, p.UnderlyingCode.LastIndexOf(".")).All(c => char.IsDigit(c))) + .ToList(); + +var validShortFloatItems = shortFloatItems + .Where(p => !string.IsNullOrEmpty(p.UnderlyingCode) + && (p.UnderlyingCode.EndsWith(".IB") || p.UnderlyingCode.EndsWith(".BC")) + && p.UnderlyingCode.LastIndexOf(".") > 0 + && p.UnderlyingCode.Substring(0, p.UnderlyingCode.LastIndexOf(".")).All(c => char.IsDigit(c))) + .Select(p => new + { + p.id, + p.UnderlyingCode, + LendingRateUnderlyingCode = p.UnderlyingCode.Substring(0, p.UnderlyingCode.LastIndexOf(".")) + }) + .ToList(); + +var interestItems = DbContext.swap_position + .Where(p => p.SwapTradeId == TradeId + && p.IsInitial + && !p.Invalid + && p.PosiDirection == 0 + && p.PositionType == 0 + && string.IsNullOrEmpty(p.UnderlyingCode) + && p.InterestMode == 9) + .Select(p => new { p.id, p.InterestMode, p.InterestDirection, p.InterestRateDefault, p.FloatRateUnderlyingCode }) + .ToList(); + +if (!interestItems.Any()) + throw new Exception("同次录入的普通利息端记录不存在"); + +var invalidFloatRateItems = interestItems + .Where(p => string.IsNullOrEmpty(p.FloatRateUnderlyingCode) || p.FloatRateUnderlyingCode != "FR007") + .ToList(); + +var validInterestItems = interestItems + .Where(p => p.FloatRateUnderlyingCode == "FR007") + .ToList(); + +if ((invalidShortFloatItems.Any() && !validShortFloatItems.Any()) || (invalidFloatRateItems.Any() && !validInterestItems.Any())) +{ + var invalidShortFloatMessage = invalidShortFloatItems.Any() + ? "空头浮动端标的不合法记录:" + string.Join(";", invalidShortFloatItems + .OrderBy(p => p.id) + .Select(p => $"记录ID为{p.id},标的为{(string.IsNullOrEmpty(p.UnderlyingCode) ? "空" : p.UnderlyingCode)},仅允许数字.IB或数字.BC格式")) + : string.Empty; + + var invalidFloatRateMessage = invalidFloatRateItems.Any() + ? (string.IsNullOrEmpty(invalidShortFloatMessage) ? string.Empty : ";") + "基准利率非法记录:" + string.Join(";", invalidFloatRateItems + .OrderBy(p => p.id) + .Select(p => $"记录ID为{p.id},基准利率为{(string.IsNullOrEmpty(p.FloatRateUnderlyingCode) ? "空" : p.FloatRateUnderlyingCode)},点差为{p.InterestRateDefault * 100m:0.#########}%,收支方向为{(p.InterestDirection == 1 ? "收取" : p.InterestDirection == 2 ? "支付" : "未知:" + p.InterestDirection)}")) + : string.Empty; + + throw new Exception($"规则17保护触发:空头浮动端标的仅允许数字.IB或数字.BC格式,普通利息端基准利率必须为FR007。{invalidShortFloatMessage}{invalidFloatRateMessage}"); +} + +var calculationInterestItems = invalidFloatRateItems.Any() ? validInterestItems : interestItems; + +var tradeDate = DbContext.trade.First(t => t.id == TradeId).TradeDate.Value.Date; + +var orderedDeviationItems = validShortFloatItems + .OrderBy(p => p.id) + .SelectMany(shortFloatItem => + { + var lendingRate = DbContext.eod_bond_lending_rate + .Where(x => x.UnderlyingSecurityId == shortFloatItem.LendingRateUnderlyingCode && x.ValueDate <= tradeDate) + .OrderByDescending(x => x.ValueDate) + .FirstOrDefault(); + + if (lendingRate == null || !lendingRate.WeightedAvgRate.HasValue) + throw new Exception($"标的 {shortFloatItem.UnderlyingCode} 对应借贷费率查询标的 {shortFloatItem.LendingRateUnderlyingCode} 在交易日 {tradeDate:yyyy-MM-dd} 前未找到借贷加权费率"); + + var lendingRatePercent = lendingRate.WeightedAvgRate.Value; + + return calculationInterestItems + .OrderBy(p => p.id) + .Select(interestItem => + { + var floatRateCode = interestItem.FloatRateUnderlyingCode; + + var floatRatePrice = DbContext.eod_commodity_future_price + .Where(e => e.UnderlyingCode == floatRateCode && e.ValueDate <= tradeDate) + .OrderByDescending(e => e.ValueDate) + .FirstOrDefault(); + + var floatRate = floatRatePrice != null && floatRatePrice.ReferencePrice.HasValue ? Convert.ToDecimal(floatRatePrice.ReferencePrice.Value) : 0m; + var interestRatePercent = (floatRate + interestItem.InterestRateDefault) * 100m; + var deviation = Math.Abs(interestRatePercent - lendingRatePercent); + + return new + { + FloatPositionId = shortFloatItem.id, + shortFloatItem.UnderlyingCode, + shortFloatItem.LendingRateUnderlyingCode, + InterestPositionId = interestItem.id, + interestItem.InterestMode, + interestItem.InterestDirection, + interestItem.InterestRateDefault, + FloatRateCode = floatRateCode, + FloatRate = floatRate, + InterestRatePercent = interestRatePercent, + LendingRatePercent = lendingRatePercent, + Deviation = deviation + }; + }); + }) + .OrderByDescending(p => p.Deviation) + .ThenBy(p => p.FloatPositionId) + .ThenBy(p => p.InterestPositionId) + .ToList(); + +if (invalidShortFloatItems.Any() || invalidFloatRateItems.Any()) +{ + var invalidShortFloatMessage = invalidShortFloatItems.Any() + ? "空头浮动端标的不合法记录:" + string.Join(";", invalidShortFloatItems + .OrderBy(p => p.id) + .Select(p => $"记录ID为{p.id},标的为{(string.IsNullOrEmpty(p.UnderlyingCode) ? "空" : p.UnderlyingCode)},仅允许数字.IB或数字.BC格式")) + : string.Empty; + + var invalidFloatRateMessage = invalidFloatRateItems.Any() + ? (string.IsNullOrEmpty(invalidShortFloatMessage) ? string.Empty : ";") + "基准利率非法记录:" + string.Join(";", invalidFloatRateItems + .OrderBy(p => p.id) + .Select(p => $"记录ID为{p.id},基准利率为{(string.IsNullOrEmpty(p.FloatRateUnderlyingCode) ? "空" : p.FloatRateUnderlyingCode)},点差为{p.InterestRateDefault * 100m:0.#########}%,收支方向为{(p.InterestDirection == 1 ? "收取" : p.InterestDirection == 2 ? "支付" : "未知:" + p.InterestDirection)}")) + : string.Empty; + + var validDeviationMessage = orderedDeviationItems.Any() + ? ";合法记录偏离明细:" + string.Join(";", orderedDeviationItems.Select(p => $"空头浮动端记录ID为{p.FloatPositionId},标的{p.UnderlyingCode},借贷费率查询标的{p.LendingRateUnderlyingCode},普通利息端记录ID为{p.InterestPositionId},基准利率{p.FloatRateCode}为{p.FloatRate * 100m:0.#########}%,点差为{p.InterestRateDefault * 100m:0.#########}%,利息端利率为{p.InterestRatePercent:0.#########}%,借贷加权费率为{p.LendingRatePercent:0.#########}%,偏离绝对值为{p.Deviation:0.#########}%,收支方向为{(p.InterestDirection == 1 ? "收取" : p.InterestDirection == 2 ? "支付" : "未知:" + p.InterestDirection)}")) + : string.Empty; + + throw new Exception($"规则17保护触发:空头浮动端标的仅允许数字.IB或数字.BC格式,普通利息端基准利率必须为FR007。{invalidShortFloatMessage}{invalidFloatRateMessage}{validDeviationMessage}"); +} + +var maxDeviationItem = orderedDeviationItems.First(); + +var detailItems = orderedDeviationItems + .Select(p => new RiskVariableValueDetailItem( + p.Deviation, + $"空头浮动端记录ID为{p.FloatPositionId},标的{p.UnderlyingCode},借贷费率查询标的{p.LendingRateUnderlyingCode},普通利息端记录ID为{p.InterestPositionId},基准利率{p.FloatRateCode}为{p.FloatRate * 100m:0.#########}%,点差为{p.InterestRateDefault * 100m:0.#########}%,利息端利率为{p.InterestRatePercent:0.#########}%,借贷加权费率为{p.LendingRatePercent:0.#########}%,偏离绝对值为{p.Deviation:0.#########}%,收支方向为{(p.InterestDirection == 1 ? "收取" : p.InterestDirection == 2 ? "支付" : "未知:" + p.InterestDirection)}")) + .ToList(); + +return new RiskVariableValueDetail( + maxDeviationItem.Deviation, + $"交易ID {TradeId},空头浮动端共{shortFloatItems.Count}条,普通利息端共{interestItems.Count}条,最大偏离绝对值为{maxDeviationItem.Deviation:0.#########}%", + detailItems); +``` + +汇总 SQL:先确认存在空头浮动端,再按合法空头浮动端和同次录入普通利息端组合及对应行情数据计算最大偏离值;借贷费率查询标的取空头浮动端 UnderlyingCode 点号前数字;若存在空头浮动端标的非法或基准利率不是 FR007 的记录则实际执行时会抛异常触发风控报警,SQL 中单独列出此类记录数供排查。 + +```sql +SET @TradeId = 3001699; +SET @Threshold = 5; + +SELECT + CASE + WHEN COUNT(DISTINCT fp.id) = 0 THEN NULL + ELSE MAX(CASE WHEN fp.UnderlyingCode REGEXP '^[0-9]+[.](IB|BC)$' AND ip.FloatRateUnderlyingCode = 'FR007' THEN ABS((IFNULL(fr.ReferencePrice, 0) + ip.InterestRateDefault) * 100 - blr.WeightedAvgRate) END) + END AS MaxDeviation, + CASE + WHEN COUNT(DISTINCT fp.id) = 0 THEN 0 + WHEN MAX(CASE WHEN fp.UnderlyingCode REGEXP '^[0-9]+[.](IB|BC)$' AND ip.FloatRateUnderlyingCode = 'FR007' THEN ABS((IFNULL(fr.ReferencePrice, 0) + ip.InterestRateDefault) * 100 - blr.WeightedAvgRate) END) > @Threshold THEN 1 + ELSE 0 + END AS IsGreaterThanThreshold, + COUNT(DISTINCT CASE WHEN fp.id IS NOT NULL AND (fp.UnderlyingCode IS NULL OR fp.UnderlyingCode = '' OR NOT (fp.UnderlyingCode REGEXP '^[0-9]+[.](IB|BC)$')) THEN fp.id END) AS InvalidShortUnderlyingCodeCount, + COUNT(DISTINCT CASE WHEN ip.id IS NOT NULL AND IFNULL(ip.FloatRateUnderlyingCode, '') <> 'FR007' THEN ip.id END) AS InvalidFloatRateCodeCount +FROM swap_position fp +LEFT JOIN swap_position ip + ON ip.SwapTradeId = fp.SwapTradeId + AND ip.IsInitial = fp.IsInitial + AND ip.Invalid = fp.Invalid + AND ip.PosiDirection = 0 + AND ip.PositionType = 0 + AND (ip.UnderlyingCode IS NULL OR ip.UnderlyingCode = '') + AND ip.InterestMode = 9 +LEFT JOIN trade t + ON t.id = fp.SwapTradeId +LEFT JOIN eod_commodity_future_price fr + ON fr.FutureContractId = ip.FloatRateUnderlyingCode + AND fr.ValueDate = ( + SELECT MAX(e.ValueDate) + FROM eod_commodity_future_price e + WHERE e.FutureContractId = ip.FloatRateUnderlyingCode + AND e.ValueDate <= t.TradeDate + ) +LEFT JOIN eod_bond_lending_rate blr + ON blr.UnderlyingSecurityId = SUBSTRING_INDEX(fp.UnderlyingCode, '.', 1) + AND fp.UnderlyingCode REGEXP '^[0-9]+[.](IB|BC)$' + AND blr.ValueDate = ( + SELECT MAX(b.ValueDate) + FROM eod_bond_lending_rate b + WHERE b.UnderlyingSecurityId = SUBSTRING_INDEX(fp.UnderlyingCode, '.', 1) + AND fp.UnderlyingCode REGEXP '^[0-9]+[.](IB|BC)$' + AND b.ValueDate <= t.TradeDate + ) +WHERE fp.SwapTradeId = @TradeId + AND fp.IsInitial = 1 + AND fp.Invalid = 0 + AND fp.PosiDirection > 0 + AND fp.PositionType = 2; +``` + +明细 SQL:用于排查空头浮动端及其同次录入普通利息端记录、基准利率、借贷加权费率;展示空头浮动端原始标的、借贷费率查询标的和保护标记,基准利率不是 FR007 或空头浮动端标的非法的记录会标记保护字段,实际执行时抛异常触发风控报警。 + +```sql +SET @TradeId = 3001699; +SET @Threshold = 5; + +SELECT + fp.id AS FloatPositionId, + ip.id AS InterestPositionId, + fp.SwapTradeId, + fp.IsInitial, + fp.Invalid, + fp.PosiDirection, + fp.PositionType, + fp.UnderlyingCode, + CASE + WHEN fp.UnderlyingCode REGEXP '^[0-9]+[.](IB|BC)$' THEN SUBSTRING_INDEX(fp.UnderlyingCode, '.', 1) + ELSE NULL + END AS LendingRateUnderlyingCode, + CASE + WHEN fp.UnderlyingCode IS NULL OR fp.UnderlyingCode = '' OR NOT (fp.UnderlyingCode REGEXP '^[0-9]+[.](IB|BC)$') THEN 1 + ELSE 0 + END AS IsShortUnderlyingProtectionTrigger, + ip.InterestMode, + ip.InterestDirection, + CASE ip.InterestDirection + WHEN 1 THEN '收取' + WHEN 2 THEN '支付' + ELSE CONCAT('未知:', ip.InterestDirection) + END AS InterestDirectionName, + ip.FloatRateUnderlyingCode, + CASE + WHEN ip.id IS NOT NULL AND IFNULL(ip.FloatRateUnderlyingCode, '') <> 'FR007' THEN 1 + ELSE 0 + END AS IsProtectionTrigger, + ip.InterestRateDefault, + ip.InterestRateDefault * 100 AS InterestRateDefault_100, + fr.ReferencePrice AS FloatRateReferencePrice, + fr.ValueDate AS FloatRateValueDate, + (IFNULL(fr.ReferencePrice, 0) + ip.InterestRateDefault) * 100 AS InterestRatePercent, + blr.WeightedAvgRate AS LendingWeightedAvgRate, + blr.ValueDate AS LendingValueDate, + CASE WHEN fp.UnderlyingCode REGEXP '^[0-9]+[.](IB|BC)$' AND ip.FloatRateUnderlyingCode = 'FR007' THEN ABS((IFNULL(fr.ReferencePrice, 0) + ip.InterestRateDefault) * 100 - blr.WeightedAvgRate) END AS DiffAbs, + CASE + WHEN fp.UnderlyingCode REGEXP '^[0-9]+[.](IB|BC)$' AND ip.FloatRateUnderlyingCode = 'FR007' AND ABS((IFNULL(fr.ReferencePrice, 0) + ip.InterestRateDefault) * 100 - blr.WeightedAvgRate) > @Threshold THEN 1 + ELSE 0 + END AS IsGreaterThanThreshold +FROM swap_position fp +LEFT JOIN swap_position ip + ON ip.SwapTradeId = fp.SwapTradeId + AND ip.IsInitial = fp.IsInitial + AND ip.Invalid = fp.Invalid + AND ip.PosiDirection = 0 + AND ip.PositionType = 0 + AND (ip.UnderlyingCode IS NULL OR ip.UnderlyingCode = '') + AND ip.InterestMode = 9 +LEFT JOIN trade t + ON t.id = fp.SwapTradeId +LEFT JOIN eod_commodity_future_price fr + ON fr.FutureContractId = ip.FloatRateUnderlyingCode + AND fr.ValueDate = ( + SELECT MAX(e.ValueDate) + FROM eod_commodity_future_price e + WHERE e.FutureContractId = ip.FloatRateUnderlyingCode + AND e.ValueDate <= t.TradeDate + ) +LEFT JOIN eod_bond_lending_rate blr + ON blr.UnderlyingSecurityId = SUBSTRING_INDEX(fp.UnderlyingCode, '.', 1) + AND fp.UnderlyingCode REGEXP '^[0-9]+[.](IB|BC)$' + AND blr.ValueDate = ( + SELECT MAX(b.ValueDate) + FROM eod_bond_lending_rate b + WHERE b.UnderlyingSecurityId = SUBSTRING_INDEX(fp.UnderlyingCode, '.', 1) + AND fp.UnderlyingCode REGEXP '^[0-9]+[.](IB|BC)$' + AND b.ValueDate <= t.TradeDate + ) +WHERE fp.SwapTradeId = @TradeId + AND fp.IsInitial = 1 + AND fp.Invalid = 0 + AND fp.PosiDirection > 0 + AND fp.PositionType = 2 +ORDER BY DiffAbs DESC, fp.id ASC, ip.id ASC; +``` + +--- + +## 29. 规则 18 查询结果排查 SQL + +规则 18:账户授权收支方向不匹配(本地)。用于核对账户授权的收支方向与交易浮动端多空方向是否匹配;不符合允许场景时命中。 + +校验内容: + +```text +只允许利息端收取且浮动端空头或者利息端支付且浮动端多头。 +不符合以下场景则不通过: +1. 利息端 = 收取,且浮动端 = 空头 +2. 利息端 = 支付,且浮动端 = 多头 +``` + +取数流程: + +```text +1. 根据 TradeId 查 swap_position。 +2. 限定 IsInitial=1、Invalid=0、PosiDirection>0,取浮动端初始持仓记录,取 PositionType 作为浮动端多空方向,1=多头,2=空头。 +3. 参考规则16、17的同次录入口径,再取同一 TradeId、同为初始有效、PosiDirection=0、PositionType=0、UnderlyingCode 为空、InterestMode=9 的普通利息端记录,取 InterestDirection 作为利息端收支方向,1=收取,2=支付。 +4. 利息端可能有多条,需将所有浮动端与所有普通利息端逐条组合检查。 +5. 任一组合不是“利息端收取且浮动端空头”,也不是“利息端支付且浮动端多头”,则命中。 +``` + +规则公式: + +```text +NOT ((InterestDirection = 1 AND PositionType = 2) OR (InterestDirection = 2 AND PositionType = 1)) +``` + +规则字段口径: + +```text +利息端收支方向:普通利息端 swap_position.InterestDirection,1=收取,2=支付 +浮动端多空方向:浮动端 swap_position.PositionType,1=多头,2=空头 +浮动端记录:swap_position.IsInitial=1、Invalid=0、PosiDirection>0 +普通利息端记录:swap_position.IsInitial=1、Invalid=0、PosiDirection=0、PositionType=0、UnderlyingCode 为空、InterestMode=9 +``` + +注释规则定义: + +```csharp +//rules.Add(new RiskRule +//{ +// Id = 1000018, +// RuleName = "账户授权收支方向不匹配(本地)", +// RuleText = "取值字段:通过 DbContext.swap_position 按 TradeId 取 IsInitial=true、Invalid=false、PosiDirection>0 的浮动端初始持仓记录,PositionType 表示浮动端多空方向,1=多头、2=空头;参考规则16、17的同次录入口径,再取同一 TradeId、同为初始有效、PosiDirection=0、PositionType=0、UnderlyingCode 为空、InterestMode=9 的普通利息端记录,InterestDirection 表示利息端收支方向,1=收取、2=支付。计算逻辑:将所有浮动端与所有普通利息端逐条组合检查,仅允许利息端=收取且浮动端=空头,或利息端=支付且浮动端=多头;任一组合不符合则触发审批。", +// RuleExpr = "", +// Version = 1, +// Status = RiskRuleStatus.Active, +// OptId = 0, +// OptName = "system", +// OptDate = DateTime.Now, +// UpdateOptId = 0, +// UpdateOptName = "system", +// UpdateDate = DateTime.Now +//}); +``` + +变量形式: + +变量名:账户授权收支方向不匹配标记 +DataType:Numeric +规则配置:账户授权收支方向不匹配标记 > 0 + +变量取值表达式: + +```csharp +var floatItems = DbContext.swap_position + .Where(p => p.SwapTradeId == TradeId + && p.IsInitial + && !p.Invalid + && p.PosiDirection > 0) + .Select(p => new + { + p.id, + p.PosiDirection, + p.PositionType + }) + .ToList(); + +if (!floatItems.Any()) + throw new Exception("浮动端初始持仓记录不存在"); + +var interestItems = DbContext.swap_position + .Where(p => p.SwapTradeId == TradeId + && p.IsInitial + && !p.Invalid + && p.PosiDirection == 0 + && p.PositionType == 0 + && string.IsNullOrEmpty(p.UnderlyingCode) + && p.InterestMode == 9) + .Select(p => new + { + p.id, + p.InterestMode, + p.InterestDirection + }) + .ToList(); + +if (!interestItems.Any()) + throw new Exception("同次录入的普通利息端记录不存在"); + +var directionItems = floatItems + .SelectMany(floatItem => interestItems.Select(interestItem => new + { + FloatPositionId = floatItem.id, + floatItem.PosiDirection, + floatItem.PositionType, + PositionTypeName = floatItem.PositionType == 1 ? "多头" : floatItem.PositionType == 2 ? "空头" : "未知:" + floatItem.PositionType, + InterestPositionId = interestItem.id, + interestItem.InterestMode, + interestItem.InterestDirection, + InterestDirectionName = interestItem.InterestDirection == 1 ? "收取" : interestItem.InterestDirection == 2 ? "支付" : "未知:" + interestItem.InterestDirection, + IsMismatch = !((interestItem.InterestDirection == 1 && floatItem.PositionType == 2) || (interestItem.InterestDirection == 2 && floatItem.PositionType == 1)) + })) + .OrderByDescending(p => p.IsMismatch) + .ThenBy(p => p.FloatPositionId) + .ThenBy(p => p.InterestPositionId) + .ToList(); + +var mismatchItems = directionItems + .Where(p => p.IsMismatch) + .ToList(); + +var detailItems = directionItems + .Select(p => new RiskVariableValueDetailItem( + p.IsMismatch ? 1m : 0m, + $"浮动端记录ID为{p.FloatPositionId},PosiDirection为{p.PosiDirection},浮动端为{p.PositionTypeName};普通利息端记录ID为{p.InterestPositionId},InterestMode为{p.InterestMode},利息端为{p.InterestDirectionName},{(p.IsMismatch ? "不符合允许场景" : "符合允许场景")}")) + .ToList(); + +if (mismatchItems.Any()) +{ + var mismatchMessage = string.Join(";", mismatchItems + .Select(p => $"浮动端记录ID为{p.FloatPositionId},浮动端为{p.PositionTypeName},普通利息端记录ID为{p.InterestPositionId},利息端为{p.InterestDirectionName}")); + + return new RiskVariableValueDetail( + 1m, + $"交易ID {TradeId} 存在账户授权收支方向不匹配组合:{mismatchMessage}。只允许利息端收取且浮动端空头,或利息端支付且浮动端多头", + detailItems); +} + +return new RiskVariableValueDetail( + 0m, + $"交易ID {TradeId} 的账户授权收支方向均符合允许场景:浮动端共{floatItems.Count}条,普通利息端共{interestItems.Count}条,已逐条组合检查;只允许利息端收取且浮动端空头,或利息端支付且浮动端多头", + detailItems); +``` + ```sql SET @TradeId = 3001699; SELECT - sp.id AS SwapPositionId, - sp.SwapTradeId, - sp.IsInitial, - sp.Invalid, - sp.PosiDirection, - sp.InterestDirection, - CASE sp.InterestDirection + fp.id AS FloatPositionId, + ip.id AS InterestPositionId, + fp.SwapTradeId, + fp.IsInitial, + fp.Invalid, + fp.PosiDirection AS FloatPosiDirection, + fp.PositionType AS FloatPositionType, + CASE fp.PositionType + WHEN 1 THEN '多头' + WHEN 2 THEN '空头' + ELSE '未知' + END AS FloatPositionTypeText, + ip.PosiDirection AS InterestPosiDirection, + ip.PositionType AS InterestPositionType, + ip.InterestMode, + ip.InterestDirection, + CASE ip.InterestDirection WHEN 1 THEN '收取' WHEN 2 THEN '支付' ELSE '未知' END AS InterestDirectionText, - sp.PositionType, - CASE sp.PositionType - WHEN 1 THEN '多头' - WHEN 2 THEN '空头' - ELSE '未知' - END AS PositionTypeText, CASE - WHEN (sp.InterestDirection = 1 AND sp.PositionType = 2) - OR (sp.InterestDirection = 2 AND sp.PositionType = 1) THEN 0 + WHEN (ip.InterestDirection = 1 AND fp.PositionType = 2) + OR (ip.InterestDirection = 2 AND fp.PositionType = 1) THEN 0 ELSE 1 END AS IsDirectionMismatch -FROM swap_position sp -WHERE sp.SwapTradeId = @TradeId - AND sp.IsInitial = 1 - AND sp.Invalid = 0 - AND sp.PosiDirection > 0; +FROM swap_position fp +INNER JOIN swap_position ip + ON ip.SwapTradeId = fp.SwapTradeId + AND ip.IsInitial = fp.IsInitial + AND ip.Invalid = fp.Invalid + AND ip.PosiDirection = 0 + AND ip.PositionType = 0 + AND (ip.UnderlyingCode IS NULL OR ip.UnderlyingCode = '') + AND ip.InterestMode = 9 +WHERE fp.SwapTradeId = @TradeId + AND fp.IsInitial = 1 + AND fp.Invalid = 0 + AND fp.PosiDirection > 0 +ORDER BY + IsDirectionMismatch DESC, + fp.id, + ip.id; ``` From 739a1efd3b5b14692f6cbbbdfe857db48ae5460d Mon Sep 17 00:00:00 2001 From: ruisu Date: Mon, 24 Aug 2026 13:31:26 +0800 Subject: [PATCH 07/24] =?UTF-8?q?feat=EF=BC=9A=E4=BC=98=E5=8C=96=E5=8F=98?= =?UTF-8?q?=E9=87=8F=E4=B8=8E=E4=BB=A3=E7=A0=81=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../RiskEngine/StructuredRuleExecutor.cs | 4 ++- YLErpDAL/Modules/RiskEngine/测试用例.md | 28 +++++++++++++------ 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/YLErpDAL/Modules/RiskEngine/StructuredRuleExecutor.cs b/YLErpDAL/Modules/RiskEngine/StructuredRuleExecutor.cs index 73c8cb7d..1a46ee33 100644 --- a/YLErpDAL/Modules/RiskEngine/StructuredRuleExecutor.cs +++ b/YLErpDAL/Modules/RiskEngine/StructuredRuleExecutor.cs @@ -519,8 +519,10 @@ namespace YLErp.Modules.RiskEngine /// private static string BuildBooleanMessage(glms_risk_variable variable, ValueExecuteResult value, bool expected) { + if (!string.IsNullOrWhiteSpace(value.DetailMessage)) + return value.DetailMessage.Trim(); + var parts = new List(); - AddDetail(parts, value.DetailMessage); parts.Add($"{variable.VariableName}为{FormatDisplayValue(value.Value)}"); parts.Add($"期望为{FormatDisplayValue(expected)}"); return string.Join(",", parts); diff --git a/YLErpDAL/Modules/RiskEngine/测试用例.md b/YLErpDAL/Modules/RiskEngine/测试用例.md index 67f25636..1d543383 100644 --- a/YLErpDAL/Modules/RiskEngine/测试用例.md +++ b/YLErpDAL/Modules/RiskEngine/测试用例.md @@ -4267,9 +4267,10 @@ NOT ((InterestDirection = 1 AND PositionType = 2) OR (InterestDirection = 2 AND 变量形式: -变量名:账户授权收支方向不匹配标记 -DataType:Numeric -规则配置:账户授权收支方向不匹配标记 > 0 +变量名:账户授权收支方向不匹配 +DataType:Boolean +ValueDomain:true/false +规则配置:账户授权收支方向不匹配 为是 变量取值表达式: @@ -4333,24 +4334,35 @@ var mismatchItems = directionItems var detailItems = directionItems .Select(p => new RiskVariableValueDetailItem( - p.IsMismatch ? 1m : 0m, + p.IsMismatch, $"浮动端记录ID为{p.FloatPositionId},PosiDirection为{p.PosiDirection},浮动端为{p.PositionTypeName};普通利息端记录ID为{p.InterestPositionId},InterestMode为{p.InterestMode},利息端为{p.InterestDirectionName},{(p.IsMismatch ? "不符合允许场景" : "符合允许场景")}")) .ToList(); if (mismatchItems.Any()) { + var matchedItems = directionItems + .Where(p => !p.IsMismatch) + .ToList(); + var mismatchMessage = string.Join(";", mismatchItems .Select(p => $"浮动端记录ID为{p.FloatPositionId},浮动端为{p.PositionTypeName},普通利息端记录ID为{p.InterestPositionId},利息端为{p.InterestDirectionName}")); + var matchedMessage = matchedItems.Any() + ? string.Join(";", matchedItems.Select(p => $"浮动端记录ID为{p.FloatPositionId},浮动端为{p.PositionTypeName},普通利息端记录ID为{p.InterestPositionId},利息端为{p.InterestDirectionName}")) + : "无"; + return new RiskVariableValueDetail( - 1m, - $"交易ID {TradeId} 存在账户授权收支方向不匹配组合:{mismatchMessage}。只允许利息端收取且浮动端空头,或利息端支付且浮动端多头", + true, + $"交易ID {TradeId} 存在账户授权收支方向不匹配组合。不匹配组合:{mismatchMessage}。匹配组合:{matchedMessage}。允许场景:利息端收取且浮动端空头,或利息端支付且浮动端多头", detailItems); } +var allMatchedMessage = string.Join(";", directionItems + .Select(p => $"浮动端记录ID为{p.FloatPositionId},浮动端为{p.PositionTypeName},普通利息端记录ID为{p.InterestPositionId},利息端为{p.InterestDirectionName}")); + return new RiskVariableValueDetail( - 0m, - $"交易ID {TradeId} 的账户授权收支方向均符合允许场景:浮动端共{floatItems.Count}条,普通利息端共{interestItems.Count}条,已逐条组合检查;只允许利息端收取且浮动端空头,或利息端支付且浮动端多头", + false, + $"交易ID {TradeId} 的账户授权收支方向均符合允许场景。匹配组合:{allMatchedMessage}。浮动端共{floatItems.Count}条,普通利息端共{interestItems.Count}条,已逐条组合检查", detailItems); ``` From 995cac356b84e375892a92e7fa98dc6acb13c6fa Mon Sep 17 00:00:00 2001 From: ruisu Date: Mon, 24 Aug 2026 15:11:43 +0800 Subject: [PATCH 08/24] =?UTF-8?q?feat=EF=BC=9A=E5=B0=9D=E8=AF=95=E8=A7=A3?= =?UTF-8?q?=E5=86=B3=E4=B8=8Etest=E5=88=86=E6=94=AF=E7=9A=84=E5=86=B2?= =?UTF-8?q?=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Modules/SwapModule/SwapDealService.cs | 75 ++++++++++++------- 1 file changed, 46 insertions(+), 29 deletions(-) diff --git a/YLErpDAL/Modules/SwapModule/SwapDealService.cs b/YLErpDAL/Modules/SwapModule/SwapDealService.cs index 2ef85c63..e478d4de 100644 --- a/YLErpDAL/Modules/SwapModule/SwapDealService.cs +++ b/YLErpDAL/Modules/SwapModule/SwapDealService.cs @@ -8,7 +8,6 @@ using YLErp.DBModels.Enums; using YLErp.Helpers; using YLErp.Modules.DataProviderModule; using YLErp.Modules.EodModule; -using YLErp.Modules.RiskEngine; using YLErp.Modules.TradeModule; using YLErp.Modules.TradeModule.DealModule; using YLErp.QdpModule; @@ -1261,24 +1260,38 @@ namespace YLErp.Modules.SwapModule /// 新风控二次确认信息;首次提交传空。 /// 本次平仓的新风控试算结果。 /// - public RiskTrialResult SwapUnwind(UnwindData unwindData, RiskTrialConfirmation confirmation = null) + public YLErp.Modules.RiskEngine.RiskTrialResult SwapUnwind(UnwindData unwindData, YLErp.Modules.RiskEngine.RiskTrialConfirmation confirmation) { if (unwindData == null) { throw new ServiceException("平仓信息不能为空"); } - var td = FindTrade(unwindData.SwapTradeId); - if (td == null) + if (FindTrade(unwindData.SwapTradeId) == null) { throw new ServiceException("未找到交易信息"); } - // 直接平仓不经过审核提交入口,落库前仍需执行平仓阶段的新风控,避免绕过 CLOSE_REVIEW 规则。 var riskTrialResult = CheckCloseRisk(unwindData, confirmation); if (!riskTrialResult.Passed) { return riskTrialResult; } + SwapUnwind(unwindData); + return riskTrialResult; + } + + /// + /// 单标的平仓 + /// + /// + /// + public void SwapUnwind(UnwindData unwindData) + { + var td = FindTrade(unwindData.SwapTradeId); + if (td == null) + { + throw new ServiceException("未找到交易信息"); + } //CheckLastEod(unwindData.ValueDate, td.StartDate.Value, unwindData.SwapTradeId); //去掉平仓收盘限制 ValidateFrontendPnL(unwindData, isIncome: false); // 只读校验告警,不阻断交易 // 前端按"占期初(original)"语义传 ClosePercent(A);后端全链路按"占剩余(remaining)"语义(B)消费。 @@ -1318,7 +1331,6 @@ namespace YLErp.Modules.SwapModule { TriggerRealtimeSwapPosition(); } - return riskTrialResult; } /// /// 自动全平仓 @@ -1842,33 +1854,39 @@ namespace YLErp.Modules.SwapModule /// 新风控二次确认信息;首次提交传空。 /// 平仓事件返回新风控试算结果,互换事件返回空。 /// - public RiskTrialResult ApplySwapTrade(UnwindData unwindData, int eventType, RiskTrialConfirmation confirmation = null) + public YLErp.Modules.RiskEngine.RiskTrialResult ApplySwapTrade(UnwindData unwindData, int eventType, YLErp.Modules.RiskEngine.RiskTrialConfirmation confirmation) { - if (unwindData == null) + YLErp.Modules.RiskEngine.RiskTrialResult riskTrialResult = null; + if (eventType == (int)SwapEventTypeEnum.平仓) { - throw new ServiceException("互换或平仓信息不能为空"); - } - - var td = FindTrade(unwindData.SwapTradeId); - if (td == null) - { - throw new ServiceException("未找到交易信息"); - } - RiskTrialResult riskTrialResult = null; - if (eventType == (int)SwapEventTypeEnum.互换) - { - NormalizeIncomeUnwindDate(unwindData); - ValidateIncomeValueDate(unwindData, td); - } - else if (eventType == (int)SwapEventTypeEnum.平仓) - { - // 审核提交保存待审核事件前执行平仓阶段的新风控,需确认时先返回前端,不创建待审核事件。 riskTrialResult = CheckCloseRisk(unwindData, confirmation); if (!riskTrialResult.Passed) { return riskTrialResult; } } + ApplySwapTrade(unwindData, eventType); + return riskTrialResult; + } + + /// + /// 互换/平仓提交审核 + /// + /// + /// + /// + public void ApplySwapTrade(UnwindData unwindData, int eventType) + { + var td = FindTrade(unwindData.SwapTradeId); + if (td == null) + { + throw new ServiceException("未找到交易信息"); + } + if (eventType == (int)SwapEventTypeEnum.互换) + { + NormalizeIncomeUnwindDate(unwindData); + ValidateIncomeValueDate(unwindData, td); + } unwindData.SwapRealizedPnL = unwindData.SwapCloseAmount; // 前端按"占期初(original)"语义传 ClosePercent(A);后端全链路按"占剩余(remaining)"语义(B)消费。 // 入口统一转换为 B,落库展示用的 A 由 SaveSwapDealInternal 还原。 @@ -1895,7 +1913,6 @@ namespace YLErp.Modules.SwapModule }); } }); - return riskTrialResult; } /// @@ -1905,7 +1922,7 @@ namespace YLErp.Modules.SwapModule /// 新风控二次确认信息;首次提交传空。 /// 包含阻断、审批、提示及试算记录ID的新风控结果。 /// 平仓请求为空。 - private RiskTrialResult CheckCloseRisk(UnwindData unwindData, RiskTrialConfirmation confirmation) + private YLErp.Modules.RiskEngine.RiskTrialResult CheckCloseRisk(UnwindData unwindData, YLErp.Modules.RiskEngine.RiskTrialConfirmation confirmation) { if (unwindData == null) { @@ -1914,14 +1931,14 @@ namespace YLErp.Modules.SwapModule const string triggerPoint = "CLOSE_REVIEW"; const int closeTrialSource = 2; - var riskContext = new RiskContext + var riskContext = new YLErp.Modules.RiskEngine.RiskContext { TradeId = unwindData.SwapTradeId, TriggerPoint = triggerPoint, UnwindDate = unwindData.UnwindDate, PayDate = unwindData.PayDate }; - return new RiskTrialService(this).CheckRisk(riskContext, closeTrialSource, confirmation); + return new YLErp.Modules.RiskEngine.RiskTrialService(this).CheckRisk(riskContext, closeTrialSource, confirmation); } private void ValidateIncomeValueDate(UnwindData unwindData, trade td) From ad3bd10d65abeb0af09bb80b10947b47295448c6 Mon Sep 17 00:00:00 2001 From: ruisu Date: Mon, 24 Aug 2026 17:59:29 +0800 Subject: [PATCH 09/24] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=B9=B3=E4=BB=93?= =?UTF-8?q?=E9=A3=8E=E6=8E=A7=E4=BA=8C=E6=AC=A1=E7=A1=AE=E8=AE=A4=E9=87=8D?= =?UTF-8?q?=E5=A4=8D=E5=BC=B9=E7=AA=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Modules/RiskEngine/RiskTrialService.cs | 33 +++++++++++++------ YLErpWeb/Controllers/SwapTrade2Controller.cs | 29 ++++++++++++---- .../Scripts/app/swaptrade/unwindSwapTrade.js | 9 +++-- 3 files changed, 51 insertions(+), 20 deletions(-) diff --git a/YLErpDAL/Modules/RiskEngine/RiskTrialService.cs b/YLErpDAL/Modules/RiskEngine/RiskTrialService.cs index ccabf681..fc421953 100644 --- a/YLErpDAL/Modules/RiskEngine/RiskTrialService.cs +++ b/YLErpDAL/Modules/RiskEngine/RiskTrialService.cs @@ -45,11 +45,11 @@ namespace YLErp.Modules.RiskEngine throw new ArgumentException("风控触发时点不能为空", nameof(context)); } - var confirmedRuleIds = new HashSet(); + var ignoreRiskRuleIds = new HashSet(); var confirmationExpired = false; if (confirmation != null) { - confirmationExpired = !TryGetConfirmedRuleIds(context, trialSource, confirmation, confirmedRuleIds); + confirmationExpired = !TryLoadIgnoreRiskRuleIds(context, trialSource, confirmation, ignoreRiskRuleIds); } var riskResult = new RiskEngineService(this).EvaluateRisk(context, context.TriggerPoint); @@ -63,10 +63,10 @@ namespace YLErp.Modules.RiskEngine // 二次提交时,若首次试算记录有效,则剔除已确认过的审批和提示规则;记录过期或上下文不匹配时重新展示全部当前命中的审批和提示规则。 var pendingApprovalRules = confirmationExpired ? currentApprovalRules - : currentApprovalRules.Where(rule => !confirmedRuleIds.Contains(rule.RuleId)).ToList(); + : currentApprovalRules.Where(rule => !ignoreRiskRuleIds.Contains(rule.RuleId)).ToList(); var pendingTipRules = confirmationExpired ? currentTipRules - : currentTipRules.Where(rule => !confirmedRuleIds.Contains(rule.RuleId)).ToList(); + : currentTipRules.Where(rule => !ignoreRiskRuleIds.Contains(rule.RuleId)).ToList(); var trial = CreateQuotaTrial(context, trialSource, riskResult, pendingApprovalRules, pendingTipRules); // 目前复用 quotaTrial 承载风控试算结果,兼容交易确认、平仓等现有详情页和二次确认流程;后续若表语义收敛,再考虑统一重命名为风控试算。 new Modules.RiskModule.QuotaMonitorService(this).SaveQuotaTrial(trial); @@ -94,7 +94,7 @@ namespace YLErp.Modules.RiskEngine /// /// 校验二次确认记录,并恢复首次试算中已确认的审批和提示规则ID。 /// - private bool TryGetConfirmedRuleIds(RiskContext context, int trialSource, RiskTrialConfirmation confirmation, ISet confirmedRuleIds) + private bool TryLoadIgnoreRiskRuleIds(RiskContext context, int trialSource, RiskTrialConfirmation confirmation, ISet ignoreRiskRuleIds) { if (confirmation.TrialDataId <= 0 || confirmation.ExpireSeconds <= 0) { @@ -115,11 +115,11 @@ namespace YLErp.Modules.RiskEngine return false; } - foreach (var ruleId in ParseConfirmedRuleIds(trial.RiskWarningDetails)) + foreach (var ruleId in GetIgnoreRiskRuleIds(confirmation, trial.RiskWarningDetails)) { - confirmedRuleIds.Add(ruleId); + ignoreRiskRuleIds.Add(ruleId); } - return confirmedRuleIds.Count > 0; + return true; } /// @@ -133,10 +133,18 @@ namespace YLErp.Modules.RiskEngine .Any(line => string.Equals(line, expectedContext, StringComparison.Ordinal)); } + private static IEnumerable GetIgnoreRiskRuleIds(RiskTrialConfirmation confirmation, string details) + { + var ignoreRiskRuleIds = confirmation.IgnoreRiskRuleIds ?? new List(); + return ignoreRiskRuleIds.Any() + ? ignoreRiskRuleIds.Where(ruleId => !string.IsNullOrWhiteSpace(ruleId)).Select(ruleId => ruleId.Trim()).Distinct() + : ParseIgnoreRiskRuleIds(details); + } + /// - /// 从系统生成的审批和提示规则明细中恢复规则ID,避免直接信任前端提交的放行规则列表。 + /// 从系统生成的审批和提示规则明细中恢复规则ID,兼容未回传忽略规则ID的旧入口。 /// - private static IEnumerable ParseConfirmedRuleIds(string details) + private static IEnumerable ParseIgnoreRiskRuleIds(string details) { const string ruleIdPrefix = "规则ID:"; var inConfirmableSection = false; @@ -270,6 +278,11 @@ namespace YLErp.Modules.RiskEngine /// 首次试算允许确认放行的有效时长,单位为秒。 /// public int ExpireSeconds { get; set; } + + /// + /// 首次试算返回并经前端回传的需忽略规则ID。 + /// + public List IgnoreRiskRuleIds { get; set; } = new List(); } /// diff --git a/YLErpWeb/Controllers/SwapTrade2Controller.cs b/YLErpWeb/Controllers/SwapTrade2Controller.cs index 0307fff2..0816fb50 100644 --- a/YLErpWeb/Controllers/SwapTrade2Controller.cs +++ b/YLErpWeb/Controllers/SwapTrade2Controller.cs @@ -304,10 +304,11 @@ namespace YLErp.Web.Controllers /// /// 本次单标的平仓数据。 /// 首次新风控试算记录ID;二次确认时传入。 + /// 首次试算返回的需忽略规则ID;二次确认时传入。 /// 平仓结果或新风控确认信息。 - public JsonResult SwapUnwindJson(UnwindData unwindData, int? trialDataId = null) + public JsonResult SwapUnwindJson(UnwindData unwindData, int? trialDataId = null, string ignoreRiskRuleIds = null) { - var result = new SwapDealService(CurUser).SwapUnwind(unwindData, CreateRiskTrialConfirmation(trialDataId)); + var result = new SwapDealService(CurUser).SwapUnwind(unwindData, CreateRiskTrialConfirmation(trialDataId, ignoreRiskRuleIds)); return BuildCloseRiskResult(result, "平仓成功"); } /// @@ -346,10 +347,11 @@ namespace YLErp.Web.Controllers /// 本次互换或平仓数据。 /// 事件类型。 /// 首次新风控试算记录ID;平仓二次确认时传入。 + /// 首次试算返回的需忽略规则ID;二次确认时传入。 /// 提交结果或新风控确认信息。 - public JsonResult ApplyUnwind(UnwindData unwindData, int eventType, int? trialDataId = null) + public JsonResult ApplyUnwind(UnwindData unwindData, int eventType, int? trialDataId = null, string ignoreRiskRuleIds = null) { - var result = new SwapDealService(CurUser).ApplySwapTrade(unwindData, eventType, CreateRiskTrialConfirmation(trialDataId)); + var result = new SwapDealService(CurUser).ApplySwapTrade(unwindData, eventType, CreateRiskTrialConfirmation(trialDataId, ignoreRiskRuleIds)); return BuildCloseRiskResult(result, "提交成功"); } @@ -379,8 +381,9 @@ namespace YLErp.Web.Controllers /// 根据首次试算记录ID创建平仓新风控二次确认参数。 /// /// 首次新风控试算记录ID。 - /// 首次提交返回空,二次确认返回包含有效期的确认参数。 - private static RiskTrialConfirmation CreateRiskTrialConfirmation(int? trialDataId) + /// 首次试算返回的需忽略规则ID,多个ID使用逗号分隔。 + /// 首次提交返回空,二次确认返回包含有效期和需忽略规则ID的确认参数。 + private static RiskTrialConfirmation CreateRiskTrialConfirmation(int? trialDataId, string ignoreRiskRuleIds) { if (!trialDataId.HasValue) { @@ -398,10 +401,21 @@ namespace YLErp.Web.Controllers return new RiskTrialConfirmation { TrialDataId = trialDataId.Value, - ExpireSeconds = expireSeconds + ExpireSeconds = expireSeconds, + IgnoreRiskRuleIds = ParseIgnoreRiskRuleIds(ignoreRiskRuleIds) }; } + private static List ParseIgnoreRiskRuleIds(string ignoreRiskRuleIds) + { + return (ignoreRiskRuleIds ?? string.Empty) + .Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries) + .Select(ruleId => ruleId.Trim()) + .Where(ruleId => !string.IsNullOrWhiteSpace(ruleId)) + .Distinct() + .ToList(); + } + /// /// 将平仓新风控结果转换为控制器统一JSON响应。 /// @@ -432,6 +446,7 @@ namespace YLErp.Web.Controllers source = "RiskWarning", type = "RiskWarningConfirm", result.TrialDataId, + ignoreRiskRuleIds = result.ApprovalRuleIds, message = result.ConfirmationExpired ? $"原风控确认已超时,请重新确认。{result.Message}" : result.Message }); } diff --git a/YLErpWeb/wwwroot/Scripts/app/swaptrade/unwindSwapTrade.js b/YLErpWeb/wwwroot/Scripts/app/swaptrade/unwindSwapTrade.js index 20884c3a..bd93614e 100644 --- a/YLErpWeb/wwwroot/Scripts/app/swaptrade/unwindSwapTrade.js +++ b/YLErpWeb/wwwroot/Scripts/app/swaptrade/unwindSwapTrade.js @@ -371,11 +371,14 @@ const vue = new Vue({ postData.eventType = 2;//互换3,平仓2 } // 提交平仓并处理新风控阻断、二次确认和成功提示。 - var submitClose = function (trialDataId) { + var submitClose = function (trialDataId, ignoreRiskRuleIds) { var requestData = _.cloneDeep(postData); if (trialDataId) { requestData.trialDataId = trialDataId; } + if (ignoreRiskRuleIds && ignoreRiskRuleIds.length > 0) { + requestData.ignoreRiskRuleIds = ignoreRiskRuleIds.join(','); + } main.post(postUrl, requestData).done(function (res) { var riskData = res.obj; if (riskData && riskData.proccessType === "QuotaTrialError") { @@ -397,7 +400,7 @@ const vue = new Vue({ return; } if (res.success && riskData && riskData.proccessType === "AdditionalProcessing" && riskData.TrialDataId) { - // 审批类规则由用户填写说明并确认,二次提交仅回传后端生成的试算记录ID。 + // 审批类规则由用户填写说明并确认,二次提交回传试算记录ID和需忽略规则ID。 var riskTrialLayerIndex = layer.open({ type: 2, title: "风控试算详情", @@ -418,7 +421,7 @@ const vue = new Vue({ remark: trialPage.Data.Remark }).done(function () { layer.close(riskTrialLayerIndex); - submitClose(riskData.TrialDataId); + submitClose(riskData.TrialDataId, riskData.ignoreRiskRuleIds || []); }); } }); From 7d00c1533d2576f432cadb4b7823dc5063bdd09f Mon Sep 17 00:00:00 2001 From: ruisu Date: Tue, 25 Aug 2026 10:30:26 +0800 Subject: [PATCH 10/24] =?UTF-8?q?=E8=A1=A5=E5=85=85=E8=AF=95=E7=AE=97?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E5=BF=AB=E7=85=A7=E8=AF=AD=E4=B9=89=E8=AF=B4?= =?UTF-8?q?=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- YLErpDAL/Modules/RiskEngine/RiskTrialService.cs | 5 +++-- YLErpDAL/Modules/RiskModule/QuotaMonitorService.cs | 3 ++- YLErpWeb/Controllers/SwapTrade2Controller.cs | 1 + 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/YLErpDAL/Modules/RiskEngine/RiskTrialService.cs b/YLErpDAL/Modules/RiskEngine/RiskTrialService.cs index fc421953..bfd85d60 100644 --- a/YLErpDAL/Modules/RiskEngine/RiskTrialService.cs +++ b/YLErpDAL/Modules/RiskEngine/RiskTrialService.cs @@ -25,11 +25,12 @@ namespace YLErp.Modules.RiskEngine /// /// 执行一次独立于老风控的新风控试算并保存试算记录。 + /// quotaTrial 在现有交易确认和平仓链路中按“每次试算快照/历史流水”使用,不作为审批状态表;二次确认会重新试算并生成新的快照。 /// /// 包含交易、触发时点及业务日期的风控上下文。 /// 试算来源,由具体业务场景约定。 /// 二次确认信息;首次试算传空。 - /// 包含阻断、审批、提示及试算记录ID的统一结果。 + /// 包含阻断、审批、提示及本次试算记录ID的统一结果。 public RiskTrialResult CheckRisk(RiskContext context, int trialSource, RiskTrialConfirmation confirmation = null) { if (context == null) @@ -68,7 +69,7 @@ namespace YLErp.Modules.RiskEngine ? currentTipRules : currentTipRules.Where(rule => !ignoreRiskRuleIds.Contains(rule.RuleId)).ToList(); var trial = CreateQuotaTrial(context, trialSource, riskResult, pendingApprovalRules, pendingTipRules); - // 目前复用 quotaTrial 承载风控试算结果,兼容交易确认、平仓等现有详情页和二次确认流程;后续若表语义收敛,再考虑统一重命名为风控试算。 + // 与交易确认 RunQuotaTrial/RunNewRiskTrial 保持一致:每次风控执行保存一条 quotaTrial 快照,用于详情展示、历史追溯和二次确认时效校验,不回写上一条记录为已确认。 new Modules.RiskModule.QuotaMonitorService(this).SaveQuotaTrial(trial); var result = new RiskTrialResult diff --git a/YLErpDAL/Modules/RiskModule/QuotaMonitorService.cs b/YLErpDAL/Modules/RiskModule/QuotaMonitorService.cs index bc3ac12c..d0492ae1 100644 --- a/YLErpDAL/Modules/RiskModule/QuotaMonitorService.cs +++ b/YLErpDAL/Modules/RiskModule/QuotaMonitorService.cs @@ -6901,7 +6901,8 @@ namespace YLErp.Modules.RiskModule return true; } /// - /// 保存试算结果 + /// 保存试算结果。 + /// 新试算对象按历史快照新增;传入已有ID时仅更新该次试算的说明、来源和操作信息,不承担审批状态流转职责。 /// /// 试算结果 public void SaveQuotaTrial(QuotaTrial obj) diff --git a/YLErpWeb/Controllers/SwapTrade2Controller.cs b/YLErpWeb/Controllers/SwapTrade2Controller.cs index 0816fb50..5908f01a 100644 --- a/YLErpWeb/Controllers/SwapTrade2Controller.cs +++ b/YLErpWeb/Controllers/SwapTrade2Controller.cs @@ -357,6 +357,7 @@ namespace YLErp.Web.Controllers /// /// 保存平仓风控特批说明,不改变首次试算时间。 + /// 平仓二次确认会重新执行风控并生成新的 quotaTrial 快照,本接口只补充首次试算记录的用户说明和审计日志。 /// /// 平仓风控试算记录ID。 /// 用户填写的特批说明。 From b9a01c29199154acc7f32483d37b608a346f4424 Mon Sep 17 00:00:00 2001 From: ruisu Date: Tue, 25 Aug 2026 11:29:44 +0800 Subject: [PATCH 11/24] =?UTF-8?q?=E5=A2=9E=E5=BC=BA=E9=A3=8E=E6=8E=A7?= =?UTF-8?q?=E6=97=A5=E5=8E=86=E6=95=B0=E6=8D=AE=E6=A0=A1=E9=AA=8C=E5=92=8C?= =?UTF-8?q?=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../RiskEngine/Helper/RiskCalendarHelper.cs | 137 +++++++++++++++--- 1 file changed, 117 insertions(+), 20 deletions(-) diff --git a/YLErpDAL/Modules/RiskEngine/Helper/RiskCalendarHelper.cs b/YLErpDAL/Modules/RiskEngine/Helper/RiskCalendarHelper.cs index 07dee68c..8ea8d558 100644 --- a/YLErpDAL/Modules/RiskEngine/Helper/RiskCalendarHelper.cs +++ b/YLErpDAL/Modules/RiskEngine/Helper/RiskCalendarHelper.cs @@ -14,11 +14,33 @@ namespace YLErp.Modules.RiskEngine /// public static class RiskCalendarHelper { + private const string CalendarDateFormat = "yyyy,MM,dd"; + + /// + /// 日历数据异常直接影响平仓日期校验和上一交易日取数,单独使用固定 logger 名称便于线上按模块检索。 + /// + private static readonly IYcLogger Logger = LogFactory.GetLogger("RiskCalendarHelper"); + + /// + /// calendar.HolidayJson 历史主格式是 yyyy,MM,dd;这里额外兼容常见日期格式,避免历史数据被静默当作交易日。 + /// 解析后统一转成 DateTime.Date,后续交易日判断不再依赖原始字符串格式。 + /// + private static readonly string[] SupportedCalendarDateFormats = + { + CalendarDateFormat, + "yyyy/MM/dd", + "yyyy-MM-dd", + "yyyyMMdd", + "yyyy-MM-ddTHH:mm:ss", + "yyyy-MM-ddTHH:mm:ssK", + "yyyy-MM-ddTHH:mm:ss.fffK" + }; + /// /// 按当前风控执行使用的数据库上下文保存日历缓存,同一次风控检查内复用,数据库上下文释放后不阻止缓存被回收。 /// - private static readonly ConditionalWeakTable>> HolidayCaches = - new ConditionalWeakTable>>(); + private static readonly ConditionalWeakTable>> HolidayCaches = + new ConditionalWeakTable>>(); /// /// 获取指定日期的上一银行间交易日。 @@ -48,8 +70,7 @@ namespace YLErp.Modules.RiskEngine var holidayCache = HolidayCaches.GetOrCreateValue(dbContext); var holidays = GetHolidays(dbContext, date.Year, "IB", "银行间", holidayCache); - var dateText = date.Date.ToString("yyyy,MM,dd", CultureInfo.InvariantCulture); - return !holidays.Contains(dateText); + return !holidays.Contains(date.Date); } public static DateTime GetPreviousExchangeTradingDay(YLContext dbContext, DateTime date) @@ -70,10 +91,9 @@ namespace YLErp.Modules.RiskEngine for (var i = 0; i < 370; i++) { var holidays = GetHolidays(dbContext, currentDate.Year, country, calendarName, holidayCache); - var currentDateText = currentDate.ToString("yyyy,MM,dd", CultureInfo.InvariantCulture); // calendar.HolidayJson 存的是非交易日;不在非交易日集合内,即认为是对应市场的交易日。 - if (!holidays.Contains(currentDateText)) + if (!holidays.Contains(currentDate)) return currentDate; currentDate = currentDate.AddDays(-1); @@ -83,32 +103,51 @@ namespace YLErp.Modules.RiskEngine } /// - /// 获取指定年份的银行间非交易日集合。 + /// 获取指定年份的非交易日集合。 /// /// 当前风控执行使用的数据库上下文。 /// 日历年份。 /// 单次风控检查内按市场和年份共享的非交易日缓存。 - /// 格式为 yyyy,MM,dd 的非交易日集合。 - private static HashSet GetHolidays(YLContext dbContext, int year, string country, string calendarName, Dictionary> holidayCache) + /// 按 Date 归一化后的非交易日集合。 + private static HashSet GetHolidays(YLContext dbContext, int year, string country, string calendarName, Dictionary> holidayCache) { - // 缓存需要同时区分市场和年份,避免银行间与交易所同一年日历相互串用。 - var cacheKey = $"{country.ToUpperInvariant()}:{year}"; + var normalizedCountry = NormalizeCountry(country); + var cacheKey = $"{normalizedCountry}:{year}"; if (holidayCache.TryGetValue(cacheKey, out var holidays)) return holidays; - // 在数据库端同时按年份和市场代码筛选,避免加载同一年份的其他市场日历。 - var normalizedCountry = country.ToUpperInvariant(); - var calendar = dbContext.calendar.FirstOrDefault(c => - c.Year == year - && (c.ValidState == null || c.ValidState != ConsGlobal.InValid) - && c.Country != null - && c.Country.ToUpper() == normalizedCountry); + // 先按年份和有效状态缩小范围,再在内存里做 Trim + ToUpperInvariant 匹配,兼容历史 Country 存在大小写或前后空格的情况。 + // 这里没有在数据库查询里直接 Trim,是为了避免不同 EF/数据库提供方对字符串函数翻译不一致。 + var validCalendars = dbContext.calendar + .Where(c => c.Year == year + && (c.ValidState == null || c.ValidState != ConsGlobal.InValid) + && c.Country != null) + .ToList(); + var matchedCalendars = validCalendars.Where(c => NormalizeCountry(c.Country) == normalizedCountry).ToList(); + var calendar = matchedCalendars.FirstOrDefault(); if (calendar == null) - throw new Exception($"未找到{year}年{calendarName}日历"); + { + var availableCountries = string.Join(",", validCalendars.Select(c => c.Country?.Trim()).Where(c => !string.IsNullOrWhiteSpace(c)).Distinct()); + Logger.Error($"[风控日历] 未找到目标市场日历 - Year:{year}, CalendarName:{calendarName}, Country:{normalizedCountry}, AvailableCountries:{availableCountries}"); + throw new Exception($"未找到{year}年{calendarName}日历,Country={normalizedCountry},当前可用日历:{availableCountries}"); + } + if (matchedCalendars.Count > 1) + { + // 多条匹配不改变原有“取第一条”的行为,只记录数据质量问题,避免线上突然因历史重复配置中断风控。 + Logger.Info($"[风控日历] 同一年存在多个匹配市场日历,使用第一条 - Year:{year}, CalendarName:{calendarName}, Country:{normalizedCountry}, MatchedIds:{string.Join(",", matchedCalendars.Select(c => c.id))}"); + } + if (!string.Equals(calendar.Country, normalizedCountry, StringComparison.Ordinal)) + { + // Country 能通过归一化匹配说明历史数据存在大小写或空格差异,只在日历首次加载时记录一次,便于后续清洗数据。 + Logger.Info($"[风控日历] 日历Country已归一化匹配 - Year:{year}, CalendarName:{calendarName}, RawCountry:{calendar.Country}, NormalizedCountry:{normalizedCountry}, CalendarId:{calendar.id}"); + } if (string.IsNullOrWhiteSpace(calendar.HolidayJson)) + { + Logger.Error($"[风控日历] HolidayJson为空 - Year:{year}, CalendarName:{calendarName}, Country:{normalizedCountry}, CalendarId:{calendar.id}"); throw new Exception($"{year}年{calendarName}日历HolidayJson为空"); + } List holidayList; try @@ -117,12 +156,70 @@ namespace YLErp.Modules.RiskEngine } catch (Exception ex) { + Logger.Error($"[风控日历] HolidayJson解析失败 - Year:{year}, CalendarName:{calendarName}, Country:{normalizedCountry}, CalendarId:{calendar.id}, Error:{ex.Message}"); throw new Exception($"{year}年{calendarName}日历HolidayJson解析失败", ex); } - holidays = new HashSet(holidayList ?? new List()); + // 日历解析和日志统计只在缓存未命中时执行;同一次风控检查内重复判断交易日不会重复解析 HolidayJson。 + holidays = NormalizeHolidays(holidayList, year, calendarName, normalizedCountry, calendar.id); holidayCache[cacheKey] = holidays; return holidays; } + + private static string NormalizeCountry(string country) + { + return (country ?? string.Empty).Trim().ToUpperInvariant(); + } + + private static HashSet NormalizeHolidays(IEnumerable holidayList, int year, string calendarName, string normalizedCountry, int calendarId) + { + var holidays = new HashSet(); + var formatCounts = new Dictionary(); + var rawCount = 0; + var blankCount = 0; + var duplicateCount = 0; + foreach (var holidayText in holidayList ?? Enumerable.Empty()) + { + rawCount++; + if (string.IsNullOrWhiteSpace(holidayText)) + { + blankCount++; + continue; + } + + // 每条原始日期只在缓存加载阶段解析一次;正常数据只累计格式分布,避免大量节假日逐条写日志。 + var holidayDate = ParseHolidayDate(holidayText, year, calendarName, normalizedCountry, calendarId, out var matchedFormat); + if (!holidays.Add(holidayDate)) + { + duplicateCount++; + } + formatCounts[matchedFormat] = formatCounts.TryGetValue(matchedFormat, out var count) ? count + 1 : 1; + } + Logger.Info($"[风控日历] HolidayJson日期归一化完成 - Year:{year}, CalendarName:{calendarName}, Country:{normalizedCountry}, CalendarId:{calendarId}, RawCount:{rawCount}, HolidayCount:{holidays.Count}, BlankCount:{blankCount}, DuplicateCount:{duplicateCount}, Formats:{string.Join(",", formatCounts.Select(item => item.Key + ":" + item.Value))}"); + return holidays; + } + + private static DateTime ParseHolidayDate(string holidayText, int year, string calendarName, string normalizedCountry, int calendarId, out string matchedFormat) + { + var normalizedHolidayText = holidayText.Trim(); + foreach (var format in SupportedCalendarDateFormats) + { + if (DateTime.TryParseExact(normalizedHolidayText, format, CultureInfo.InvariantCulture, DateTimeStyles.AllowWhiteSpaces, out var holidayDate)) + { + matchedFormat = format; + return holidayDate.Date; + } + } + + // 支持带时区的历史数据;最终取日期部分用于非交易日集合匹配,避免字符串格式差异导致静默漏判。 + if (DateTimeOffset.TryParse(normalizedHolidayText, CultureInfo.InvariantCulture, DateTimeStyles.AllowWhiteSpaces, out var holidayDateOffset)) + { + matchedFormat = "DateTimeOffset.TryParse"; + return holidayDateOffset.Date; + } + + Logger.Error($"[风控日历] HolidayJson日期格式无法识别 - Year:{year}, CalendarName:{calendarName}, Country:{normalizedCountry}, CalendarId:{calendarId}, RawValue:{holidayText}"); + throw new Exception($"{year}年{calendarName}日历HolidayJson存在无法识别的日期格式:{holidayText}"); + } } } From 877cf9dc4fc8603aefeb4f435fe879be974dca55 Mon Sep 17 00:00:00 2001 From: tengyufan <1532636164@qq.com> Date: Thu, 27 Aug 2026 13:16:01 +0800 Subject: [PATCH 12/24] =?UTF-8?q?fix:=20=E5=85=BC=E5=AE=B9TRS=E6=97=A5?= =?UTF-8?q?=E7=BB=88=E6=8E=A8=E9=80=81=E5=8E=86=E5=8F=B2=E5=88=A9=E6=81=AF?= =?UTF-8?q?=E8=85=BF=E7=B1=BB=E5=88=AB=E4=B8=BA=E7=A9=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TrsContractKafkaPushServiceTest.cs | 82 +++++++++++++++++++ .../EodModule/TrsContractKafkaPushService.cs | 25 ++++-- 2 files changed, 99 insertions(+), 8 deletions(-) diff --git a/UnitTestProject/Modules/EodModule/TrsContractKafkaPushServiceTest.cs b/UnitTestProject/Modules/EodModule/TrsContractKafkaPushServiceTest.cs index 88ffb133..5c31e45a 100644 --- a/UnitTestProject/Modules/EodModule/TrsContractKafkaPushServiceTest.cs +++ b/UnitTestProject/Modules/EodModule/TrsContractKafkaPushServiceTest.cs @@ -142,6 +142,88 @@ namespace YLErp.Modules.EodModuleTests Assert.AreEqual(0m, item.InitMarginLoss); } + [TestMethod] + public void BuildContract_历史类别为空_仍推送全部TRS合约() + { + var valueDate = new DateTime(2026, 2, 10); + var eodSwap = new eod_swap { ValueDate = valueDate, SwapTradeId = 1645, SwapTradeNo = "ZSZQ-IS-202602090001" }; + var positions = new List + { + new() { SwapTradeId = 1645, PositionId = 33306, UnderlyingCode = "220208.IB", PositionType = 1 }, + new() { SwapTradeId = 1645, PositionId = 33307, InterestMode = (int)InterestModeEnum.标的期初全价, InterestRateDefault = 0.001m, InterestDirection = 1 } + }; + var swapPositions = new Dictionary + { + [33306] = new() { id = 33306, category_tag = null }, + [33307] = new() { id = 33307, category_tag = null } + }; + + var item = TrsContractKafkaPushService.BuildContract( + eodSwap, + new Dictionary { [1645] = new() { id = 1645, UnderlyingCode = "220208.IB" } }, + positions, + swapPositions); + + Assert.AreEqual(0m, item.FixedRate); + Assert.AreEqual(1, item.InterestDirection); + Assert.AreEqual(1, item.FloatingDirection); + } + + [TestMethod] + public void BuildContract_增强收益腿不参与固定利率取值() + { + var eodSwap = new eod_swap { ValueDate = new DateTime(2026, 8, 24), SwapTradeId = 7 }; + var positions = new List + { + new() { SwapTradeId = 7, PositionId = 101, UnderlyingCode = "600000.SH", PositionType = 2 }, + new() { SwapTradeId = 7, PositionId = 102, InterestMode = (int)InterestModeEnum.固定值, InterestRateDefault = 0.0123m, InterestDirection = 1 }, + new() { SwapTradeId = 7, PositionId = 103, InterestMode = (int)InterestModeEnum.固定值, InterestRateDefault = 0.0999m, InterestDirection = 2 } + }; + var swapPositions = new Dictionary + { + [101] = new() { id = 101, category_tag = null }, + [102] = new() { id = 102, category_tag = "互换利率" }, + [103] = new() { id = 103, category_tag = "增强收益" } + }; + + var item = TrsContractKafkaPushService.BuildContract( + eodSwap, + new Dictionary { [7] = new() { id = 7, UnderlyingCode = "600000.SH" } }, + positions, + swapPositions); + + Assert.AreEqual(0.0123m, item.FixedRate); + Assert.AreEqual(1, item.InterestDirection); + Assert.AreEqual(2, item.FloatingDirection); + } + + [TestMethod] + public void BuildContract_多条互换利率腿_取第一条() + { + var eodSwap = new eod_swap { ValueDate = new DateTime(2026, 8, 24), SwapTradeId = 7 }; + var positions = new List + { + new() { SwapTradeId = 7, PositionId = 101, UnderlyingCode = "600000.SH", PositionType = 1 }, + new() { SwapTradeId = 7, PositionId = 102, InterestMode = (int)InterestModeEnum.固定值, InterestRateDefault = 0.0123m, InterestDirection = 1 }, + new() { SwapTradeId = 7, PositionId = 103, InterestMode = (int)InterestModeEnum.固定值, InterestRateDefault = 0.0456m, InterestDirection = 2 } + }; + var swapPositions = new Dictionary + { + [101] = new() { id = 101, category_tag = null }, + [102] = new() { id = 102, category_tag = "互换利率" }, + [103] = new() { id = 103, category_tag = "互换利率" } + }; + + var item = TrsContractKafkaPushService.BuildContract( + eodSwap, + new Dictionary { [7] = new() { id = 7, UnderlyingCode = "600000.SH" } }, + positions, + swapPositions); + + Assert.AreEqual(0.0123m, item.FixedRate); + Assert.AreEqual(1, item.InterestDirection); + } + private static TestableTrsContractKafkaPushService CreateService(RecordingKafkaProducer producer, DateTime valueDate) { return new TestableTrsContractKafkaPushService( diff --git a/YLErpDAL/Modules/EodModule/TrsContractKafkaPushService.cs b/YLErpDAL/Modules/EodModule/TrsContractKafkaPushService.cs index 0efc85e1..60f59edf 100644 --- a/YLErpDAL/Modules/EodModule/TrsContractKafkaPushService.cs +++ b/YLErpDAL/Modules/EodModule/TrsContractKafkaPushService.cs @@ -140,7 +140,7 @@ namespace YLErp.Modules.EodModule .ToList(); var positionIds = eodPositions.Select(x => x.PositionId).Distinct().ToList(); var swapPositions = _dbContext.swap_position - .Where(x => positionIds.Contains(x.id) && !x.Invalid && x.category_tag == InterestCategory) + .Where(x => positionIds.Contains(x.id) && !x.Invalid) .AsNoTracking() .ToDictionary(x => x.id); @@ -167,18 +167,27 @@ namespace YLErp.Modules.EodModule } var positions = eodPositions.Where(x => x.SwapTradeId == eodSwap.SwapTradeId).ToList(); - var floating = positions.Where(x => !string.IsNullOrWhiteSpace(x.UnderlyingCode) && swapPositions.ContainsKey(x.PositionId)).ToList(); - var interest = positions.Where(x => string.IsNullOrWhiteSpace(x.UnderlyingCode) + var floating = positions.Where(x => !string.IsNullOrWhiteSpace(x.UnderlyingCode)).ToList(); + var interestCandidates = positions.Where(x => string.IsNullOrWhiteSpace(x.UnderlyingCode) && ConsTrade.InterestModels.Contains(x.InterestMode) && swapPositions.TryGetValue(x.PositionId, out var swapPosition) - && swapPosition.category_tag == InterestCategory).ToList(); + && (swapPosition.category_tag == InterestCategory || string.IsNullOrWhiteSpace(swapPosition.category_tag))) + .ToList(); - if (floating.Count != 1 || interest.Count != 1) + // 互换利率腿优先;同类别多腿按当前查询顺序取第一条。历史类别为空时保留利息方向, + // 但 fixedRate 按约定置 0,避免把未标注类别的历史值当作已确认利率。 + var interest = interestCandidates.FirstOrDefault(x => + swapPositions.TryGetValue(x.PositionId, out var swapPosition) + && swapPosition.category_tag == InterestCategory); + var isUncategorizedInterest = interest == null && interestCandidates.Count > 0; + interest ??= interestCandidates.FirstOrDefault(); + + if (floating.Count != 1 || interest == null) { - throw new InvalidOperationException($"TRS legs invalid, swapTradeId:{eodSwap.SwapTradeId}, floating:{floating.Count}, interest:{interest.Count}"); + throw new InvalidOperationException($"TRS legs invalid, swapTradeId:{eodSwap.SwapTradeId}, floating:{floating.Count}, interest:{(interest == null ? 0 : 1)}"); } - var interestLeg = interest[0]; + var interestLeg = interest; var floatingLeg = floating[0]; return new TrsContractSnapshotItem { @@ -193,7 +202,7 @@ namespace YLErp.Modules.EodModule Dv01 = eodSwap.dv01 ?? 0, StartDate = trade.StartDate?.ToString(DateFormat), MaturityDate = trade.ExerciseDate?.ToString(DateFormat), - FixedRate = interestLeg.InterestRateDefault, + FixedRate = isUncategorizedInterest ? 0 : interestLeg.InterestRateDefault, InterestDirection = interestLeg.InterestDirection, FloatingDirection = floatingLeg.PositionType, InitMarginGain = eodSwap.InitMarginGain, From 896c69cd8833d4c2aafbda134633f797723cc406 Mon Sep 17 00:00:00 2001 From: ruisu Date: Thu, 27 Aug 2026 13:30:53 +0800 Subject: [PATCH 13/24] =?UTF-8?q?fix:=20=E7=89=B9=E6=89=B9=E6=89=B9?= =?UTF-8?q?=E9=87=8F=E7=A1=AE=E8=AE=A4=E8=B7=B3=E8=BF=87=E6=96=B0=E9=A3=8E?= =?UTF-8?q?=E6=8E=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TradeModule/DealModule/TradeConfirmService.cs | 12 +++++++----- YLErpWeb/Controllers/tradeController.cs | 5 ++++- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/YLErpDAL/Modules/TradeModule/DealModule/TradeConfirmService.cs b/YLErpDAL/Modules/TradeModule/DealModule/TradeConfirmService.cs index a10d96ac..9149ddc8 100644 --- a/YLErpDAL/Modules/TradeModule/DealModule/TradeConfirmService.cs +++ b/YLErpDAL/Modules/TradeModule/DealModule/TradeConfirmService.cs @@ -46,7 +46,7 @@ namespace YLErp.Modules.TradeModule.DealModule /// /// 2021-02-04改造:批量确认因为耗时太长,用户多页面(交易列表,今日交易)并发确认导致生成多条期权费资金记录 /// - public TradeConfirmResultModel tradeConfirm(IEnumerable tradeids, bool ignoreMoneyCheck = false, bool isSkipApproval = false, bool ignoreRiskWarning = false, IEnumerable ignoreRiskRuleIds = null) + public TradeConfirmResultModel tradeConfirm(IEnumerable tradeids, bool ignoreMoneyCheck = false, bool isSkipApproval = false, bool ignoreRiskWarning = false, IEnumerable ignoreRiskRuleIds = null, bool skipNewRiskCheck = false) { if (tradeids is null || !tradeids.Any(n => n > 0)) { @@ -102,7 +102,8 @@ namespace YLErp.Modules.TradeModule.DealModule changeConfirmPaths: result.changeConfirmPaths, continueQuotaCheck: idCache.Contains(pid), ignoreRiskWarning: ignoreRiskWarning, - ignoreRiskRuleIds: ignoreRiskRuleIds); + ignoreRiskRuleIds: ignoreRiskRuleIds, + skipNewRiskCheck: skipNewRiskCheck); if (pid > 0) { idCache.Add(pid); @@ -166,9 +167,10 @@ namespace YLErp.Modules.TradeModule.DealModule /// /// /// + /// 仅用于特批批量确认,true 表示老风控和新风控都跳过;单笔老风控特批保持 false,仍执行新风控。 /// private TradeOpenResult ConfirmTrade(int tid, bool isBatch, bool hasTradeProcess, - bool ignoreMoneyCheck, bool isSkipApproval, List confirmedTradeIds, List changeConfirmPaths, bool continueQuotaCheck = false, bool ignoreRiskWarning = false, IEnumerable ignoreRiskRuleIds = null) + bool ignoreMoneyCheck, bool isSkipApproval, List confirmedTradeIds, List changeConfirmPaths, bool continueQuotaCheck = false, bool ignoreRiskWarning = false, IEnumerable ignoreRiskRuleIds = null, bool skipNewRiskCheck = false) { var td = DbContext.trade.FirstOrDefault(t => t.id == tid); var result = new TradeOpenResult(td ?? new trade()); @@ -211,8 +213,8 @@ namespace YLErp.Modules.TradeModule.DealModule var trialService = new QuotaMonitorService(this); if (ignoreMoneyCheck) { - // ignoreMoneyCheck 表示老风控资金/限额检查已被特批放行,只跳过老风控;新风控仍需独立执行。 - if (!trialService.CheckTradeConfirmNewRisk(ref result, ignoreRiskWarning, ignoreRiskRuleIds)) + // 单笔老风控特批仍需执行新风控;特批批量确认通过 skipNewRiskCheck 显式跳过新风控。 + if (!skipNewRiskCheck && !trialService.CheckTradeConfirmNewRisk(ref result, ignoreRiskWarning, ignoreRiskRuleIds)) { return result; } diff --git a/YLErpWeb/Controllers/tradeController.cs b/YLErpWeb/Controllers/tradeController.cs index 12de7016..462484d4 100644 --- a/YLErpWeb/Controllers/tradeController.cs +++ b/YLErpWeb/Controllers/tradeController.cs @@ -2489,12 +2489,15 @@ namespace YLErp.Web.Controllers } } var isSkipApproval = false; + var skipNewRiskCheck = false; + // 特批批量确认的语义是直接确认,跳过审批、老风控和新风控;单笔老风控特批不设置该标记。 if (CurUser.交易管理_特批批量确认 && isSkipCheck) { ignoreMoneyCheck = true; isSkipApproval = true; + skipNewRiskCheck = true; } - var result = new TradeConfirmService(CurUser).tradeConfirm(tradeidArr, ignoreMoneyCheck, isSkipApproval, ignoreRiskWarning, ignoreRiskRuleIdArr); + var result = new TradeConfirmService(CurUser).tradeConfirm(tradeidArr, ignoreMoneyCheck, isSkipApproval, ignoreRiskWarning, ignoreRiskRuleIdArr, skipNewRiskCheck); _logger.Info($"TradeConfirmRisk.Result tradeids:{tradeids}, lackOfMoney:{result.LackOfMoney}, type:{result.type}, trialDataId:{result.TrialDataId}, oldRiskNeedSpecialApproval:{result.OldRiskNeedSpecialApproval}, newRiskNeedApproval:{result.NewRiskNeedApproval}, newRiskBlocked:{result.NewRiskBlocked}, ignoreRiskRuleIds:{string.Join(",", result.ignoreRiskRuleIds ?? new List())}, errorMsgLength:{result.errorMsg?.Length ?? 0}, tipMsgLength:{result.tipMsg?.Length ?? 0}, userId:{CurUser?.UserId}"); //如果需要前端确认信息,触发新老风控 From 8d5b781156f368454a19f8bcb1c2f23923d2349d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=94=A6=E9=BA=9F=20=E7=8E=8B?= Date: Thu, 27 Aug 2026 13:36:26 +0800 Subject: [PATCH 14/24] =?UTF-8?q?BugFix=20=E5=8E=BB=E6=8E=89=E6=B3=A8?= =?UTF-8?q?=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EodModule/SettlementModule/EodCheckMonitoredTrade.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/YLErpDAL/Modules/EodModule/SettlementModule/EodCheckMonitoredTrade.cs b/YLErpDAL/Modules/EodModule/SettlementModule/EodCheckMonitoredTrade.cs index 1e3a79a6..cf64c1f7 100644 --- a/YLErpDAL/Modules/EodModule/SettlementModule/EodCheckMonitoredTrade.cs +++ b/YLErpDAL/Modules/EodModule/SettlementModule/EodCheckMonitoredTrade.cs @@ -1,4 +1,4 @@ -using System.Linq.Expressions; +using System.Linq.Expressions; using YLErp.Helpers; using YLErp.Model; using YLErp.Modules.DataProviderModule; @@ -170,7 +170,7 @@ namespace YLErp.Modules.EodModule.SettlementModule var yesterday = settleDate.AddDays(i - 1); var today = settleDate.AddDays(i); new SwapEodPositionService(OptUser).SwapPositionCompose(today, yesterday, clientIds); - // CalculateMargin(today, yesterday, clientIds); + CalculateMargin(today, yesterday, clientIds); new SwapEodPositionService(OptUser).SwapEodCompose(today, yesterday, clientIds); } From ef4b73f1ce44576bdcfae9f7c2eac60eb0d5f815 Mon Sep 17 00:00:00 2001 From: hjhan Date: Thu, 27 Aug 2026 13:50:07 +0800 Subject: [PATCH 15/24] =?UTF-8?q?feat:=20=E7=A1=AE=E8=AE=A4=E4=B9=A6?= =?UTF-8?q?=E5=8D=8F=E8=AE=AE=E6=AE=B5=E5=8B=BE=E9=80=89=E6=A1=86=E6=8C=89?= =?UTF-8?q?=E5=AE=A2=E6=88=B7=E4=B8=BB=E5=8D=8F=E8=AE=AE=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E5=8A=A8=E6=80=81=E7=94=9F=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在已合并为单段的协议段基础上,把 9 个勾选框(SAC/NAFMII 主协议与 补充协议、协会、三份定义文件)从模板硬编码(Wingdings 2 复选框与 固定文本□)改为占位符,由生成器按客户开户维护的 client_meta.MainProtocolType(1=NAFMII,其余 SAC)填 ☑/□, 避免 NAFMII 客户确认书错按 SAC 勾选展示。 - 修改 4 份确认书模板,移除全部 Wingdings 2 依赖 - TradeConfirmationGenerator 按主协议类型赋勾选值, 主协议类型缺失时记录日志并按 SAC 展示(与原行为一致) - 定义文件维度暂无客户协议数据,统一空框,待资料补齐后接入 - 新增 TestGuoLianConfirmTemplate 渲染测试覆盖 SAC/NAFMII 两类客户 --- ...模板-【客户看多】-【债券ETF】-清洁版.docx | Bin 42742 -> 39447 bytes ...境内模板-【客户看多】-【现券】-清洁版.docx | Bin 45533 -> 37799 bytes ...模板-【客户看空】-【债券ETF】-清洁版.docx | Bin 44477 -> 40256 bytes ...境内模板-【客户看空】-【现券】-清洁版.docx | Bin 48689 -> 40370 bytes .../TradeConfirmationGenerator.cs | 22 ++++- .../PluginTests/TestGuoLianConfirmTemplate.cs | 86 ++++++++++++++++++ 6 files changed, 105 insertions(+), 3 deletions(-) create mode 100644 UnitTestProject/PluginTests/TestGuoLianConfirmTemplate.cs diff --git a/Plugins/YLErp.Plugins.GuoLian/App_Docs/contract_template/国联民生-收益互换交易确认书-境内模板-【客户看多】-【债券ETF】-清洁版.docx b/Plugins/YLErp.Plugins.GuoLian/App_Docs/contract_template/国联民生-收益互换交易确认书-境内模板-【客户看多】-【债券ETF】-清洁版.docx index 030e6c1c073433a804c76d2e0d2b6c82de800672..7a9fb1fa0eb9e19d5a6b884d3535a0a32e1dc696 100644 GIT binary patch delta 37652 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 z
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 + /// 国联确认书模板协议段勾选框占位符化后的渲染验证: + /// 客户开户维护的主协议类型(client_meta.MainProtocolType,1=NAFMII,其余 SAC) + /// 决定协议段 ☑/□ 勾选位置,模板不再依赖 Wingdings 2 硬编码复选框。 + /// + [TestClass] + public class TestGuoLianConfirmTemplate + { + private static string TemplatePath => + Path.Combine(AppContext.BaseDirectory, "..\\..\\..\\..\\Plugins\\YLErp.Plugins.GuoLian\\App_Docs\\contract_template", + "国联民生-收益互换交易确认书-境内模板-【客户看多】-【现券】-清洁版.docx"); + + private static string OutputDir => Path.Combine(AppContext.BaseDirectory, "TestOutputs"); + + private static JsonVarDic BuildVarDic(bool isNafmii) + { + var varDic = new JsonVarDic(); + varDic.SetVar("合同编号", "GL-20260827-001"); + varDic.SetVar("客户名称", "测试客户"); + varDic.SetVar("主协议编号", "GL-ZU-2026-001"); + varDic.SetVar("补充协议编号", "GL-BC-2026-001"); + + static string Check(bool on) => on ? "☑" : "□"; + varDic.SetVar("主协议SAC勾选", Check(!isNafmii)); + varDic.SetVar("主协议NAFMII勾选", Check(isNafmii)); + varDic.SetVar("补充协议SAC勾选", Check(!isNafmii)); + varDic.SetVar("补充协议NAFMII勾选", Check(isNafmii)); + varDic.SetVar("协会证券业勾选", "□"); + varDic.SetVar("协会交易商勾选", "□"); + varDic.SetVar("定义文件商品勾选", "□"); + varDic.SetVar("定义文件利率勾选", "□"); + varDic.SetVar("定义文件债券勾选", "□"); + return varDic; + } + + private static string RenderAndReadBody(bool isNafmii, string fileName) + { + Directory.CreateDirectory(OutputDir); + var targetPath = Path.Combine(OutputDir, fileName); + OfficeFileConverter.ConvertByUsingDocTemplate(TemplatePath, targetPath, BuildVarDic(isNafmii)); + + using var zip = ZipFile.OpenRead(targetPath); + var entry = zip.GetEntry("word/document.xml"); + using var stream = entry.Open(); + using var reader = new StreamReader(stream, Encoding.UTF8); + var xml = reader.ReadToEnd(); + + // 勾选框与协议名称分属不同 run,断言前拼接纯文本 + var plainText = new StringBuilder(); + foreach (System.Text.RegularExpressions.Match m in System.Text.RegularExpressions.Regex.Matches(xml, @"]*>(.*?)")) + { + plainText.Append(m.Groups[1].Value); + } + return plainText.ToString(); + } + + [TestMethod("测试-国联确认书-SAC客户协议段勾选")] + public void TestSacAgreementChecked() + { + var body = RenderAndReadBody(isNafmii: false, "guolian_confirm_sac.docx"); + + Assert.IsTrue(body.Contains("☑《中国证券期货市场衍生品交易主协议》/"), "SAC 客户主协议应勾选 SAC"); + Assert.IsTrue(body.Contains("□《中国银行间市场金融衍生产品交易主协议(2009年版)》"), "SAC 客户主协议不应勾选 NAFMII"); + Assert.IsTrue(body.Contains("☑《中国证券期货市场衍生品交易主协议》补充协议"), "SAC 客户补充协议应勾选 SAC"); + Assert.IsFalse(body.Contains("{{主协议SAC勾选}}"), "协议段占位符应全部被替换"); + } + + [TestMethod("测试-国联确认书-NAFMII客户协议段勾选")] + public void TestNafmiiAgreementChecked() + { + var body = RenderAndReadBody(isNafmii: true, "guolian_confirm_nafmii.docx"); + + Assert.IsTrue(body.Contains("□《中国证券期货市场衍生品交易主协议》/"), "NAFMII 客户主协议不应勾选 SAC"); + Assert.IsTrue(body.Contains("☑《中国银行间市场金融衍生产品交易主协议(2009年版)》"), "NAFMII 客户主协议应勾选 NAFMII"); + Assert.IsTrue(body.Contains("☑《中国银行间市场金融衍生产品交易主协议(2009年版)补充协议》"), "NAFMII 客户补充协议应勾选 NAFMII"); + Assert.IsFalse(body.Contains("{{主协议NAFMII勾选}}"), "协议段占位符应全部被替换"); + } + } +} From 08d374a4184c67f0f58167127e25336d9368a4ed Mon Sep 17 00:00:00 2001 From: hjhan Date: Thu, 27 Aug 2026 14:09:09 +0800 Subject: [PATCH 16/24] =?UTF-8?q?fix:=20=E7=A1=AE=E8=AE=A4=E4=B9=A6?= =?UTF-8?q?=E5=8B=BE=E9=80=89=E6=A1=86=E6=B8=B2=E6=9F=93=E8=A7=82=E6=84=9F?= =?UTF-8?q?=E2=80=94=E2=80=94=E5=8D=A0=E4=BD=8D=E7=AC=A6run=E6=98=BE?= =?UTF-8?q?=E5=BC=8F=E6=8C=87=E5=AE=9A=E7=AC=A6=E5=8F=B7=E5=AD=97=E4=BD=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 生成的确认书中 ☑/□ 占位符继承模板楷体,楷体无 U+2611/U+25A1 字形, Word 按字体回退渲染导致符号与周围文字大小不一。 - 模板中 11 处勾选框占位符 run(协议段 9 处 + 利率类型 IsFixed/IsFloat 2 处) 显式指定 Segoe UI Symbol 并将字号由 24 调至 28 对齐楷体正文视觉高度 - 嵌在长文本 run 中的占位符(主协议NAFMII勾选、IsFixed/IsFloat)拆分为 独立 run,使前后文字保持楷体、符号单独设字体 - 渲染测试补充 IsFixed/IsFloat 驱动,产物 11 处勾选框均验证为符号字体 --- ...模板-【客户看多】-【债券ETF】-清洁版.docx | Bin 39447 -> 39502 bytes ...境内模板-【客户看多】-【现券】-清洁版.docx | Bin 37799 -> 37862 bytes ...模板-【客户看空】-【债券ETF】-清洁版.docx | Bin 40256 -> 40313 bytes ...境内模板-【客户看空】-【现券】-清洁版.docx | Bin 40370 -> 40426 bytes .../PluginTests/TestGuoLianConfirmTemplate.cs | 3 +++ 5 files changed, 3 insertions(+) diff --git a/Plugins/YLErp.Plugins.GuoLian/App_Docs/contract_template/国联民生-收益互换交易确认书-境内模板-【客户看多】-【债券ETF】-清洁版.docx b/Plugins/YLErp.Plugins.GuoLian/App_Docs/contract_template/国联民生-收益互换交易确认书-境内模板-【客户看多】-【债券ETF】-清洁版.docx index 7a9fb1fa0eb9e19d5a6b884d3535a0a32e1dc696..8fde2716b1f5bda3a518660ae233ecebba3435df 100644 GIT binary patch delta 24017 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 YK}C@DW1-ct6wsegLiGMb#1XIl2cqdNRsaA1 diff --git a/Plugins/YLErp.Plugins.GuoLian/App_Docs/contract_template/国联民生-收益互换交易确认书-境内模板-【客户看空】-【债券ETF】-清洁版.docx b/Plugins/YLErp.Plugins.GuoLian/App_Docs/contract_template/国联民生-收益互换交易确认书-境内模板-【客户看空】-【债券ETF】-清洁版.docx index f83854bc0094daa59e5bc54ae8a2e3ba7ef6f79f..61b412b957676e5d58c6b43fb10279a8078d476c 100644 GIT binary patch delta 24139 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 WjgXa*;-5jA!uA>WO;RS@>-t~dy{L2m delta 24081 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

+ /// 授信垫付的初始预付金计入已缴(2026-08-27 修正,交易2538实证): + /// 初始预付金走授信腿不产生应付预付金流水(现金净收额=0),已缴初始=授信初始占用净额—— + /// 目标追加 = 维持 −(现金净收额+初始授信占用净额),否则每个结算日按维持全额重复开追加。 + /// + [TestMethod] + public void AM_009_授信初始预付金计入已缴_不重复追加() + { + //交易2538 首日实际数据:维持2,808,000;初始预付金2,000,000全走授信(现金净收额0) + var payableNetCash = 0d; + var initCreditNet = 2_000_000d; + var target = SwapAdditionalMarginCalc.CalcTarget(2_808_000, payableNetCash + initCreditNet); + Assert.AreEqual(808_000, target, 1e-6); + + //对照:修正前只扣现金净收额 → 目标2,808,000 全额追加(多收2,000,000 授信占用,即本BUG) + } + /// /// 追保回落(维持下降到应付之下)不返还:目标为 0 → 已补足保持,新增 0; /// 超付部分由可用资金公式的负缺口(Σ维持−累计)体现,不产生返还记录。 diff --git a/UnitTestProject/Modules/SwapModule/SwapSpanMarginCalcTest.cs b/UnitTestProject/Modules/SwapModule/SwapSpanMarginCalcTest.cs index 9407a1c6..1c092896 100644 --- a/UnitTestProject/Modules/SwapModule/SwapSpanMarginCalcTest.cs +++ b/UnitTestProject/Modules/SwapModule/SwapSpanMarginCalcTest.cs @@ -131,6 +131,55 @@ namespace YLErp.Modules.SwapModule Assert.AreSame(tiers[3], SwapSpanMarginCalc.MatchTier(tiers, false, 2.00)); } + /// + /// 层间空隙不落最深层(2026-08-27 修正,交易2538实证): + /// 真实模板空头档位 (−∞,0.99]∪(1.00,1.03],(0.99,1.00] 为价格在期初附近小幅波动的"未触发追保"空隙—— + /// 此前兜底一律按最深层计,ratio≈0.99999 被错误收取最深档(0.04×基数)。 + /// 修正后:空隙返回 null(追加保证金按0);仅穿出最深层边界(ratio>最深上界)才按最深层计。 + /// + [TestMethod] + public void SS_008_空头层间空隙_不落最深层_追加为零() + { + //模板"保证金测试01"实际配置形态:第1层 (−∞,0.99],第2~4层 (1.00,1.03] + var tiers = new List + { + Tier(null, 0.99, 0.01), + Tier(1.00, 1.01, 0.02), + Tier(1.01, 1.02, 0.03), + Tier(1.02, 1.03, 0.04), + }; + //交易2538 08-24:净价100 → ratio = 100/100.0011 ≈ 0.99999 落 (0.99,1.00] 空隙 → 不追保 + Assert.IsNull(SwapSpanMarginCalc.MatchTier(tiers, false, 0.99999)); + Assert.IsNull(SwapSpanMarginCalc.MatchTier(tiers, false, 0.995)); + //空隙边界归第1层 + Assert.AreSame(tiers[0], SwapSpanMarginCalc.MatchTier(tiers, false, 0.99)); + //空隙上方正常落档 + Assert.AreSame(tiers[1], SwapSpanMarginCalc.MatchTier(tiers, false, 1.005)); + Assert.AreSame(tiers[2], SwapSpanMarginCalc.MatchTier(tiers, false, 1.015)); + Assert.AreSame(tiers[3], SwapSpanMarginCalc.MatchTier(tiers, false, 1.025)); + //穿出最深层上界 → 按最深层计(原有语义不变) + Assert.AreSame(tiers[3], SwapSpanMarginCalc.MatchTier(tiers, false, 1.0301)); + } + + /// + /// 多头层间空隙同理:空隙返回 null(追加0),仅跌破最深层下界才按最深层计。 + /// + [TestMethod] + public void SS_009_多头层间空隙_不落最深层() + { + var tiers = new List + { + Tier(0.98, null, 0.01), + Tier(0.96, 0.97, 0.03), //留出 (0.97,0.98) 空隙 + Tier(0.95, 0.96, 0.04), + }; + Assert.IsNull(SwapSpanMarginCalc.MatchTier(tiers, true, 0.975)); + Assert.AreSame(tiers[1], SwapSpanMarginCalc.MatchTier(tiers, true, 0.9699)); + Assert.AreSame(tiers[2], SwapSpanMarginCalc.MatchTier(tiers, true, 0.955)); + //穿出最深层下界 → 按最深层计(原有语义不变) + Assert.AreSame(tiers[2], SwapSpanMarginCalc.MatchTier(tiers, true, 0.94)); + } + [TestMethod] public void SS_008_无可用层_返回null() { diff --git a/YLErpDAL/Modules/SwapModule/Margin/SwapAdditionalMarginService.cs b/YLErpDAL/Modules/SwapModule/Margin/SwapAdditionalMarginService.cs index 08e26da3..f6540009 100644 --- a/YLErpDAL/Modules/SwapModule/Margin/SwapAdditionalMarginService.cs +++ b/YLErpDAL/Modules/SwapModule/Margin/SwapAdditionalMarginService.cs @@ -8,7 +8,9 @@ namespace YLErp.Modules.SwapModule.Margin { /// /// R3 阶段四 §4.1:合约维度(MarginWatchRule==0)规则15 交易日终结算产生"追加保证金"资金记录。 - /// 交易维度追加保证金 = 维持保证金(阶段三引擎 trade_span 产出)− 累计保证金(应付预付金+追加保证金 流水净额 + 追加授信占用); + /// 交易维度追加保证金 = 维持保证金(阶段三引擎 trade_span 产出)− 已缴保证金净额 + /// (应付预付金现金净收额 + 初始授信占用净额 + 追加保证金现金累计 + 追加授信占用累计—— + /// 2026-08-27 修正:授信垫付的初始预付金不产生应付预付金流水,此前未计入已缴导致每个结算日按维持全额重复开追加); /// 现金部分为逐结算日增量记录(BUG-03 修正:每结算日一条、Money=−increment,键 TradeId+Action+Deal+HappenDate 幂等), /// 需求上升只增不减;授信优先(阶段二规则):授信部分只写授信出入表(remark 前缀=追加保证金,position_id 空、冗余 trade_id)。 /// 由 EOD 在客户资金计算之前调用:当日新记录计入当日出入金窗口并翻"已结算",重跑时 目标/已补足 不变 → 新增为 0 不重复写。 @@ -107,6 +109,16 @@ namespace YLErp.Modules.SwapModule.Margin .Select(g => new { TradeId = g.Key ?? 0, Funded = g.Sum(x => x.amount) }) .ToDictionary(x => x.TradeId, x => x.Funded); + //初始预付金的授信占用净额(非"追加保证金"前缀:簿记初始占用 + 平仓释放取负,Σ(amount) 即净已缴): + //授信腿不产生应付预付金流水,目标追加里只扣现金净收额会把授信垫付的初始预付金漏掉—— + //每个结算日都按维持保证金全额重复开追加(BUG:多收授信占用/现金,2026-08-27 交易2538实证:初始授信200万未扣、首日全额追加280.8万) + var initCreditByTrade = DbContext.client_credit_inout.AsNoTracking() + .Where(x => x.trade_id != null && tradeIds.Contains(x.trade_id ?? 0) + && (x.remark == null || !x.remark.StartsWith(ClientCreditInoutService.AdditionalMarginRemark))) + .GroupBy(x => x.trade_id) + .Select(g => new { TradeId = g.Key ?? 0, Funded = g.Sum(x => x.amount) }) + .ToDictionary(x => x.TradeId, x => x.Funded); + var fundTagService = new SwapFundTagService(this); var cashService = new ClientCashInCashOutService(this); var creditService = new ClientCreditInoutService(this); @@ -121,8 +133,11 @@ namespace YLErp.Modules.SwapModule.Margin { continue; } - var target = SwapAdditionalMarginCalc.CalcTarget(maintenance, - payableNetByTrade.TryGetValue(td.id, out var payableNet) ? payableNet : 0); + //目标追加 = 维持保证金 − 已缴初始保证金净额(现金应付预付金净收额 + 授信初始占用净额, + //授信垫付与现金垫付同等对待,杜绝授信初始预付金被重复追加) + var payableNet = (payableNetByTrade.TryGetValue(td.id, out var payable) ? payable : 0) + + (initCreditByTrade.TryGetValue(td.id, out var initCredit) ? initCredit : 0); + var target = SwapAdditionalMarginCalc.CalcTarget(maintenance, payableNet); if (target <= 0) { continue; diff --git a/YLErpDAL/Modules/SwapModule/Margin/SwapSpanMarginCalc.cs b/YLErpDAL/Modules/SwapModule/Margin/SwapSpanMarginCalc.cs index 93c2155c..7ae27f18 100644 --- a/YLErpDAL/Modules/SwapModule/Margin/SwapSpanMarginCalc.cs +++ b/YLErpDAL/Modules/SwapModule/Margin/SwapSpanMarginCalc.cs @@ -72,11 +72,27 @@ namespace YLErp.Modules.SwapModule.Margin return tier; } } - //未落任何层:价格已穿出最深一层边界(低于多头最深层下界/高于空头最深层上界),按最深层计; - //最深层按边界值取(多头=最小下界、空头=最大上界),不依赖配置数组顺序(BUG-25 引擎侧防御) - return isCustomerLong + //未落任何层分两种情形: + //① 价格穿出最深一层边界(多头低于最深层下界/空头高于最深层上界)→ 按最深层计(追保金额不再上升); + // 最深层按边界值取(多头=最小下界、空头=最大上界),不依赖配置数组顺序(BUG-25 引擎侧防御)。 + //② 层间空隙(如空头 (0.99,1.00]——价格在期初附近小幅波动、未触发追保的区间)→ 返回 null,追加保证金按 0。 + // 此前兜底不分情形一律按最深层计,空隙价格被错误收取最深档追保 + // (2026-08-27 交易2538实证:08-24净价100→ratio 0.99999 落空头(0.99,1.00]空档,被按0.04最深档收80.8万)。 + var deepest = isCustomerLong ? valid.OrderBy(t => t.Lower ?? double.MinValue).First() : valid.OrderByDescending(t => t.Upper ?? double.MaxValue).First(); + if (isCustomerLong) + { + if (priceRatio < (deepest.Lower ?? double.MinValue)) + { + return deepest; + } + } + else if (priceRatio > (deepest.Upper ?? double.MaxValue)) + { + return deepest; + } + return null; } /// From 30bf3492bd21793083339371a67bf9e26af91b79 Mon Sep 17 00:00:00 2001 From: hjhan Date: Thu, 27 Aug 2026 14:55:48 +0800 Subject: [PATCH 22/24] =?UTF-8?q?fix(EQD-7049):=20=E6=9C=9F=E6=9D=83?= =?UTF-8?q?=E5=AE=9A=E4=BB=B7=E9=A1=B5=E6=A0=87=E7=9A=84=E4=B8=8B=E6=8B=89?= =?UTF-8?q?=E5=BC=82=E6=AD=A5=E7=BB=93=E6=9E=9C=E8=90=BD=E5=9C=B0=E5=90=8E?= =?UTF-8?q?=E5=88=B7=E6=96=B0=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 现象(客户反馈):输入关键词接口返回20条但下拉只显示2条,继续输入又正常 - 根因:FastVue.autocomplete 对函数型 lookup 只同步取返回值渲染,服务端响应 回来后仅写缓存、未触发重渲染,下拉永远显示"上一次请求结果+当前词再过滤", 慢一拍且被前端二次过滤(品种/IsCombined/contains)进一步砍少 - 修复:响应到达且输入未变、下拉可见时重触发插件 onValueChange 重渲染; _fresh 命中当前关键词直接展示服务端结果(不再前端二次过滤,跨品种结果不误滤), _seq 单调递增丢弃乱序响应,_inflight 防同关键词重复请求 - 移除 mounted 中无效的 autocomplete('search') 调用(插件无此方法,一直为空操作) - 同步修改东莞定制版 structure_dz.js - 已用 Playwright 对照验证:旧代码复现"输入20只显2项/接口返回20条",修复后 两文件 20 项断言全过(显示数=服务端返回、无请求风暴、乱序不污染、可选中) --- .../wwwroot/Scripts/app/pricing/structure.js | 60 +++++++++++------- .../Scripts/app/pricing/structure_dz.js | 61 ++++++++++++------- 2 files changed, 77 insertions(+), 44 deletions(-) diff --git a/YLErpWeb/wwwroot/Scripts/app/pricing/structure.js b/YLErpWeb/wwwroot/Scripts/app/pricing/structure.js index 63a8e75c..39fed9ba 100644 --- a/YLErpWeb/wwwroot/Scripts/app/pricing/structure.js +++ b/YLErpWeb/wwwroot/Scripts/app/pricing/structure.js @@ -112,15 +112,22 @@ const vueTradeType = function () { //标的选择组件(EQD-7049:改为服务端搜索,不再依赖全量 ylotc.underlyings,避免十几万标的整段下载卡死) const vueUnderlying = function () { const _suggestionTpl = _.template($('#underlyingSuggestionTpl').html()); - // 标的缓存:按 品种|关键词 隔离;乱序响应由 token 丢弃(helper 收在函数内,避免全局绑定冲突) + // 标的缓存(同品种各实例共享):_cache 为最近一次服务端结果,_fresh 记录其对应的 品种|关键词, + // _seq 单调递增丢弃乱序/过期响应,_inflight 防同关键词重复请求(helper 收在函数内,避免全局绑定冲突) const _cache = {}; - const _tokens = {}; + const _fresh = {}; + const _seq = {}; + const _inflight = {}; function _fetch(varietyId, query, cb) { - var key = (varietyId || 0) + '|' + (query || ''); - var token = (_tokens[key] = (_tokens[key] || 0) + 1); + var vid = varietyId || 0; + var q = query || ''; + var key = vid + '|' + q; + if (_inflight[key]) return; + var seq = (_seq[vid] = (_seq[vid] || 0) + 1); + _inflight[key] = true; var postData = { - FilterCode: (query || '').toUpperCase(), - VarietyId: varietyId || 0, + FilterCode: q.toUpperCase(), + VarietyId: vid, MaxShowLength: 20, BlackLimit: 1, UseForTrading: true, @@ -128,7 +135,8 @@ const vueUnderlying = function () { CheckLaunch: true }; main.post('/frontdata/AjaxGetUnderlyingSelect', postData).done(function (res) { - if (_tokens[key] !== token) return; // 丢弃过期响应 + delete _inflight[key]; + if (_seq[vid] !== seq) return; // 已有更新的关键词发起请求,丢弃本响应 var arr = (res && (res.obj || res.data)) || []; var norm = arr.map(function (x) { return { @@ -142,7 +150,11 @@ const vueUnderlying = function () { PinYin: x.PinYin || '' }; }); - cb && cb(norm); + _cache[vid] = norm; + _fresh[vid] = key; + cb && cb(norm, q); + }).fail(function () { + delete _inflight[key]; }); } function _filter(list, query, varietyId) { @@ -163,24 +175,28 @@ const vueUnderlying = function () { mounted() { var self = this; this.jqInput = $(this.$el).children(0); - // EQD-7049:预拉默认20条(当前品种),避免下拉空白 - _fetch(self.underlying.VarietyId, '', function (list) { - _cache[self.underlying.VarietyId || 0] = list; - try { $(self.jqInput).autocomplete('search', ''); } catch (e) {} - }); + // EQD-7049:预拉默认20条(当前品种),获得焦点时由插件自身的 onValueChange 呈现 + _fetch(self.underlying.VarietyId, ''); this.autoctrl = FastVue.autocomplete(this.jqInput, { valueField: 'Code', - lookup(query, callback) { + lookup(query) { var varietyId = self.underlying.VarietyId; - var cached = _cache[varietyId || 0] || []; - var immediate = _filter(cached, query, varietyId); - if (query) { - // 有输入时异步向服务端搜索并刷新缓存(乱序响应由 token 丢弃) - _fetch(varietyId, query, function (list) { - _cache[varietyId || 0] = list; - }); + var vid = varietyId || 0; + var key = vid + '|' + (query || ''); + if (_fresh[vid] === key) { + // 命中当前关键词的服务端结果:直接展示(服务端已按 StartsWith+品种/黑名单过滤,不再前端二次过滤) + return (_cache[vid] || []).slice(0, 20); } - return immediate; + // 异步搜索。FastVue 包装的 lookup 只同步取返回值渲染,服务端结果到达后必须重新触发 + // onValueChange 才会显示;重走 lookup 时命中上面的 _fresh 分支直接返回,不会循环请求 + _fetch(varietyId, query, function (list, q) { + var inst = self.jqInput.autocomplete(); + if (!inst || !inst.visible) return; // 下拉已关闭:留待下次获得焦点时呈现 + if ((self.jqInput.val() || '').toLowerCase() !== q.toLowerCase()) return; // 输入已变化:等新关键词的响应 + inst.onValueChange(); + }); + // 过渡兜底:服务端响应到达前用旧缓存按关键词过滤,避免搜索期间下拉空白 + return _filter(_cache[vid] || [], query, varietyId); }, onSelect(data) { if (self.underlying !== data) { diff --git a/YLErpWeb/wwwroot/Scripts/app/pricing/structure_dz.js b/YLErpWeb/wwwroot/Scripts/app/pricing/structure_dz.js index 757f2a16..d0712e3c 100644 --- a/YLErpWeb/wwwroot/Scripts/app/pricing/structure_dz.js +++ b/YLErpWeb/wwwroot/Scripts/app/pricing/structure_dz.js @@ -108,18 +108,26 @@ const vueTradeType = function () { }; }; +//标的选择组件(EQD-7049:改为服务端搜索,不再依赖全量 ylotc.underlyings,避免十几万标的整段下载卡死) //标的选择组件(EQD-7049:改为服务端搜索,不再依赖全量 ylotc.underlyings,避免十几万标的整段下载卡死) const vueUnderlying = function () { const _suggestionTpl = _.template($('#underlyingSuggestionTpl').html()); - // 标的缓存:按 品种|关键词 隔离;乱序响应由 token 丢弃(helper 收在函数内,避免全局绑定冲突) + // 标的缓存(同品种各实例共享):_cache 为最近一次服务端结果,_fresh 记录其对应的 品种|关键词, + // _seq 单调递增丢弃乱序/过期响应,_inflight 防同关键词重复请求(helper 收在函数内,避免全局绑定冲突) const _cache = {}; - const _tokens = {}; + const _fresh = {}; + const _seq = {}; + const _inflight = {}; function _fetch(varietyId, query, cb) { - var key = (varietyId || 0) + '|' + (query || ''); - var token = (_tokens[key] = (_tokens[key] || 0) + 1); + var vid = varietyId || 0; + var q = query || ''; + var key = vid + '|' + q; + if (_inflight[key]) return; + var seq = (_seq[vid] = (_seq[vid] || 0) + 1); + _inflight[key] = true; var postData = { - FilterCode: (query || '').toUpperCase(), - VarietyId: varietyId || 0, + FilterCode: q.toUpperCase(), + VarietyId: vid, MaxShowLength: 20, BlackLimit: 1, UseForTrading: true, @@ -127,7 +135,8 @@ const vueUnderlying = function () { CheckLaunch: true }; main.post('/frontdata/AjaxGetUnderlyingSelect', postData).done(function (res) { - if (_tokens[key] !== token) return; // 丢弃过期响应 + delete _inflight[key]; + if (_seq[vid] !== seq) return; // 已有更新的关键词发起请求,丢弃本响应 var arr = (res && (res.obj || res.data)) || []; var norm = arr.map(function (x) { return { @@ -141,7 +150,11 @@ const vueUnderlying = function () { PinYin: x.PinYin || '' }; }); - cb && cb(norm); + _cache[vid] = norm; + _fresh[vid] = key; + cb && cb(norm, q); + }).fail(function () { + delete _inflight[key]; }); } function _filter(list, query, varietyId) { @@ -162,24 +175,28 @@ const vueUnderlying = function () { mounted() { var self = this; this.jqInput = $(this.$el).children(0); - // EQD-7049:预拉默认20条(当前品种),避免下拉空白 - _fetch(self.underlying.VarietyId, '', function (list) { - _cache[self.underlying.VarietyId || 0] = list; - try { $(self.jqInput).autocomplete('search', ''); } catch (e) {} - }); + // EQD-7049:预拉默认20条(当前品种),获得焦点时由插件自身的 onValueChange 呈现 + _fetch(self.underlying.VarietyId, ''); this.autoctrl = FastVue.autocomplete(this.jqInput, { valueField: 'Code', - lookup(query, callback) { + lookup(query) { var varietyId = self.underlying.VarietyId; - var cached = _cache[varietyId || 0] || []; - var immediate = _filter(cached, query, varietyId); - if (query) { - // 有输入时异步向服务端搜索并刷新缓存(乱序响应由 token 丢弃) - _fetch(varietyId, query, function (list) { - _cache[varietyId || 0] = list; - }); + var vid = varietyId || 0; + var key = vid + '|' + (query || ''); + if (_fresh[vid] === key) { + // 命中当前关键词的服务端结果:直接展示(服务端已按 StartsWith+品种/黑名单过滤,不再前端二次过滤) + return (_cache[vid] || []).slice(0, 20); } - return immediate; + // 异步搜索。FastVue 包装的 lookup 只同步取返回值渲染,服务端结果到达后必须重新触发 + // onValueChange 才会显示;重走 lookup 时命中上面的 _fresh 分支直接返回,不会循环请求 + _fetch(varietyId, query, function (list, q) { + var inst = self.jqInput.autocomplete(); + if (!inst || !inst.visible) return; // 下拉已关闭:留待下次获得焦点时呈现 + if ((self.jqInput.val() || '').toLowerCase() !== q.toLowerCase()) return; // 输入已变化:等新关键词的响应 + inst.onValueChange(); + }); + // 过渡兜底:服务端响应到达前用旧缓存按关键词过滤,避免搜索期间下拉空白 + return _filter(_cache[vid] || [], query, varietyId); }, onSelect(data) { if (self.underlying !== data) { From 539896c5f6e23ea337a73362ce759881702b878b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=94=A6=E9=BA=9F=20=E7=8E=8B?= Date: Thu, 27 Aug 2026 15:07:07 +0800 Subject: [PATCH 23/24] =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=A2=84=E4=BB=98?= =?UTF-8?q?=E9=87=91=E6=A8=A1=E6=9D=BF=E7=9B=B8=E5=85=B3=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=EF=BC=9B=E7=A7=91=E5=88=9BETF=E4=BF=9D=E5=AD=98=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../margin_template_v2/margin_template_v2ClientEdit.cshtml | 3 +-- .../margin_template_v2DefaultEdit.cshtml | 3 +-- .../Views/margin_template_v2/margin_template_v2Edit.cshtml | 7 +++---- .../Views/margin_template_v2/margin_template_v2List.cshtml | 6 +++--- .../app/marginTemplate/marginTemplateV2DefaultEdit.js | 7 +++++-- .../Scripts/app/marginTemplate/marginTemplateV2Edit.js | 7 +++++-- 6 files changed, 18 insertions(+), 15 deletions(-) diff --git a/YLErpWeb/Views/margin_template_v2/margin_template_v2ClientEdit.cshtml b/YLErpWeb/Views/margin_template_v2/margin_template_v2ClientEdit.cshtml index 851f637c..593f2612 100644 --- a/YLErpWeb/Views/margin_template_v2/margin_template_v2ClientEdit.cshtml +++ b/YLErpWeb/Views/margin_template_v2/margin_template_v2ClientEdit.cshtml @@ -1,4 +1,4 @@ -@using YLErp.Enums; +@using YLErp.Enums; @model margin_template_v2 @{ @@ -216,7 +216,6 @@  ETF 子类: (按期限分档:≤5y、(5y-10y]、(10y-30y]、>30y,每个档位独立设置)

-

存量 x/y 配置保留但不再展示,请按新区间结构录入。

期限档位:{{sec.termLabel}}

khwygM0sG1q+b?s;qe;odj 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 delta 22980 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 PQ#*1%L^0`iaL4}u-)GL0 diff --git a/UnitTestProject/PluginTests/TestGuoLianConfirmTemplate.cs b/UnitTestProject/PluginTests/TestGuoLianConfirmTemplate.cs index b06302f9..16135144 100644 --- a/UnitTestProject/PluginTests/TestGuoLianConfirmTemplate.cs +++ b/UnitTestProject/PluginTests/TestGuoLianConfirmTemplate.cs @@ -37,6 +37,9 @@ namespace YLErp.PluginTests varDic.SetVar("定义文件商品勾选", "□"); varDic.SetVar("定义文件利率勾选", "□"); varDic.SetVar("定义文件债券勾选", "□"); + // 利率类型勾选框(同模板内另一处 ☑/□ 占位符),一并驱动以便预览完整 + varDic.SetVar("IsFixed", isNafmii ? "□" : "☑"); + varDic.SetVar("IsFloat", isNafmii ? "☑" : "□"); return varDic; } From ab9f67c34729e8e965b1c6412179fe31943df807 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E5=86=B0=E5=86=B0?= <437394478@qq.com> Date: Thu, 27 Aug 2026 14:29:50 +0800 Subject: [PATCH 17/24] =?UTF-8?q?fix:=20=E7=BB=93=E7=AE=97=E5=8D=95?= =?UTF-8?q?=E4=B8=AD=E8=BF=BD=E5=8A=A0=E9=A2=84=E4=BB=98=E9=87=91=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=E5=8F=96=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SwapSettlementBillRowBuilder.cs | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/YLErpDAL/Modules/TradeModule/DocGenerateModule/SwapSettlementBillRowBuilder.cs b/YLErpDAL/Modules/TradeModule/DocGenerateModule/SwapSettlementBillRowBuilder.cs index 36fe722e..d6063274 100644 --- a/YLErpDAL/Modules/TradeModule/DocGenerateModule/SwapSettlementBillRowBuilder.cs +++ b/YLErpDAL/Modules/TradeModule/DocGenerateModule/SwapSettlementBillRowBuilder.cs @@ -64,7 +64,6 @@ public static class SwapSettlementBillRowBuilder var positions = input.Positions ?? Array.Empty(); var eventFlows = input.EventFlows ?? Array.Empty(); - // 三个业务日期是结算单和文件命名的必填项,缺失时直接阻止生成不完整附件。 var startDate = input.Trade.StartDate ?? throw new ServiceException("结算单缺少交易起始日"); var eventDate = input.CloseFlow.UnwindDate @@ -72,7 +71,7 @@ public static class SwapSettlementBillRowBuilder var payDate = input.CloseFlow.PayDate ?? throw new ServiceException("结算单缺少支付日"); - // 将同一事件的普通利息与预付金利息分开;预付金本金仅统计结算日前已生效的腿。 + var settlementPosition = positions.FirstOrDefault(x => x.id == input.CloseFlow.PositionId); var interestEvents = eventFlows .Where(x => ConsTrade.InterestModels.Contains(x.InterestMode)) @@ -91,9 +90,13 @@ public static class SwapSettlementBillRowBuilder var fee = -(input.CloseFlow.TradingFee + input.CloseFlow.TradingFeePending); var marginInterest = -marginEvents.Sum(x => x.InterestClosePnL); var initialMargin = SumMargin(effectiveMargins, InterestModeEnum.初始预付金); - var additionalMargin = SumMargin(effectiveMargins, InterestModeEnum.追加预付金); + + var additionalMarginPositions = positions + .Where(x => x.InterestMode == (int)InterestModeEnum.追加预付金) + .ToList(); + var additionalMargin = SumMargin(additionalMarginPositions, InterestModeEnum.追加预付金); + - // 净额结算仅包含全部事件利息和浮动盈亏,不包含预付金返还本金。 var netSettlementAmount = -eventFlows.Sum(x => x.InterestClosePnL) - input.CloseFlow.FloatPnlSum; var maturitySettlementAmount = netSettlementAmount + initialMargin + additionalMargin; @@ -101,10 +104,10 @@ public static class SwapSettlementBillRowBuilder ? 0m : interestAmount / input.CloseNotionalValue; - // 日终持仓的当日浮动端分红按标的类型拆分:债券展示期间付息,非债券展示期间分红。 + var isCashBond = ConsGlobal.InstrumentType.IsBond(input.UnderlyingInstrumentType); - // 此处集中完成模板字段映射和展示精度处理,生成器只负责组装原始业务数据。 + return new ExcelReportModel { TradeNumber = input.ConfirmNo, @@ -141,7 +144,9 @@ public static class SwapSettlementBillRowBuilder .ToString("0.0000%"), MarginInterestAmount = marginInterest.ToString("0.00"), InitialMargin = initialMargin.ToString("0.00"), - AdditionalMargin = additionalMargin.ToString("0.00"), + AdditionalMargin = additionalMarginPositions.Count > 0 + ? additionalMargin.ToString("0.00") + : string.Empty, MarginAmout = Math.Abs(initialMargin).ToString("0.00"), MarkClosePnl = (-input.CloseFlow.FloatPnlSum).ToString("0.00"), NetSettleAmout = netSettlementAmount.ToString("0.00"), From 763a589ae8e2b8bc08b08d830e951ead72e1eefe Mon Sep 17 00:00:00 2001 From: ruisu Date: Thu, 27 Aug 2026 14:31:28 +0800 Subject: [PATCH 18/24] =?UTF-8?q?fix:=20=E4=BB=85=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E9=A3=8E=E6=8E=A7=E8=A7=A6=E5=8F=91=E7=A1=AE=E8=AE=A4=E6=97=A5?= =?UTF-8?q?=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- YLErpWeb/Controllers/tradeController.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/YLErpWeb/Controllers/tradeController.cs b/YLErpWeb/Controllers/tradeController.cs index 462484d4..1ac089bf 100644 --- a/YLErpWeb/Controllers/tradeController.cs +++ b/YLErpWeb/Controllers/tradeController.cs @@ -2469,7 +2469,6 @@ namespace YLErp.Web.Controllers var ignoreMoneyCheck = tradeidArr.Count() == 1 && (additionalProcessing == tradeBLL.LackOfMoney || isOldNewRiskConfirm); var ignoreRiskWarning = tradeidArr.Count() == 1 && (additionalProcessing == tradeBLL.RiskWarningConfirm || isOldNewRiskConfirm); var ignoreRiskRuleIdArr = StringHelper.ConvertCommaValuesToStringArray(ignoreRiskRuleIds); - _logger.Info($"TradeConfirmRisk.Request tradeids:{tradeids}, additionalProcessing:{additionalProcessing}, trialDataId:{trialDataId}, ignoreMoneyCheck:{ignoreMoneyCheck}, ignoreRiskWarning:{ignoreRiskWarning}, ignoreRiskRuleIds:{ignoreRiskRuleIds}, isSkipCheck:{isSkipCheck}, userId:{CurUser?.UserId}"); // 老风控交易特批、新风控审批及组合特批统一基于 trialDataId 做超时校验,超时后清空放行标记并重新校验。 // tradeview.js 和 swapTradeView.js 会回传 trialDataId;未回传的旧入口保持原有行为,不进入超时校验。 if (ignoreMoneyCheck || ignoreRiskWarning) @@ -2498,7 +2497,10 @@ namespace YLErp.Web.Controllers skipNewRiskCheck = true; } var result = new TradeConfirmService(CurUser).tradeConfirm(tradeidArr, ignoreMoneyCheck, isSkipApproval, ignoreRiskWarning, ignoreRiskRuleIdArr, skipNewRiskCheck); - _logger.Info($"TradeConfirmRisk.Result tradeids:{tradeids}, lackOfMoney:{result.LackOfMoney}, type:{result.type}, trialDataId:{result.TrialDataId}, oldRiskNeedSpecialApproval:{result.OldRiskNeedSpecialApproval}, newRiskNeedApproval:{result.NewRiskNeedApproval}, newRiskBlocked:{result.NewRiskBlocked}, ignoreRiskRuleIds:{string.Join(",", result.ignoreRiskRuleIds ?? new List())}, errorMsgLength:{result.errorMsg?.Length ?? 0}, tipMsgLength:{result.tipMsg?.Length ?? 0}, userId:{CurUser?.UserId}"); + if (result.NewRiskBlocked || result.NewRiskNeedApproval || result.OldRiskNeedSpecialApproval || result.type == TradeOpenRetCode.QuotaTrialError.ToString() || result.type == TradeOpenRetCode.RiskWarning.ToString()) + { + _logger.Info($"TradeConfirmRisk.Result tradeids:{tradeids}, lackOfMoney:{result.LackOfMoney}, type:{result.type}, trialDataId:{result.TrialDataId}, oldRiskNeedSpecialApproval:{result.OldRiskNeedSpecialApproval}, newRiskNeedApproval:{result.NewRiskNeedApproval}, newRiskBlocked:{result.NewRiskBlocked}, skipNewRiskCheck:{skipNewRiskCheck}, ignoreRiskRuleIds:{string.Join(",", result.ignoreRiskRuleIds ?? new List())}, errorMsgLength:{result.errorMsg?.Length ?? 0}, tipMsgLength:{result.tipMsg?.Length ?? 0}, userId:{CurUser?.UserId}"); + } //如果需要前端确认信息,触发新老风控 if (result.LackOfMoney) From f3ed08f71b8a3d6edccf656195f686469498fc88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=94=A6=E9=BA=9F=20=E7=8E=8B?= Date: Thu, 27 Aug 2026 14:33:12 +0800 Subject: [PATCH 19/24] =?UTF-8?q?#EQD-6949=20=E5=9B=BD=E8=81=94=E6=B0=91?= =?UTF-8?q?=E7=94=9F-=E6=94=AF=E6=8C=81=E4=BC=B0=E5=80=BC=E6=A0=B8?= =?UTF-8?q?=E5=AF=B9=EF=BC=88=E5=90=AB=E6=9C=9F=E5=88=9D=E4=BF=9D=E8=AF=81?= =?UTF-8?q?=E9=87=91=E7=9B=91=E6=8E=A7=EF=BC=89=EF=BC=88=E8=B5=84=E9=87=91?= =?UTF-8?q?=E7=9B=91=E6=8E=A7=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- YLErpDAL/BLL/EodSettlement/ClientBalanceUtility.cs | 6 ++++-- YLErpWeb/Controllers/clientController.cs | 7 +++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/YLErpDAL/BLL/EodSettlement/ClientBalanceUtility.cs b/YLErpDAL/BLL/EodSettlement/ClientBalanceUtility.cs index 52ffb2ca..a4cc847b 100644 --- a/YLErpDAL/BLL/EodSettlement/ClientBalanceUtility.cs +++ b/YLErpDAL/BLL/EodSettlement/ClientBalanceUtility.cs @@ -1627,8 +1627,10 @@ namespace YLErp.BLL.EodSettlement VmFundSum = roundFunc(item.VmFundSum), OtherFund = roundFunc(item.OtherFund), AmountFund = roundFunc(item.AmountFund), - MySideMargin = roundFunc(item.MySideMargin), - MaintenanceMargin = roundFunc(item.MaintenanceMargin), + //初始/维持保证金金额与每日估值报告同口径(SettlementReportService 账户状况块): + //初始=应付预付金流水净额(SwapInitMargin),维持=−MySideMargin(client_span 反号聚合) + MySideMargin = roundFunc(item.SwapInitMargin), + MaintenanceMargin = roundFunc(-item.MySideMargin), SwapMarketAmount = roundFunc(item.SwapMarketAmount), SwapMarketAmountPercent = item.SwapMarketAmountPercent, AvailableAmount = roundFunc(item.AvailableAmount), diff --git a/YLErpWeb/Controllers/clientController.cs b/YLErpWeb/Controllers/clientController.cs index f1aaae6d..2c7dd6d7 100644 --- a/YLErpWeb/Controllers/clientController.cs +++ b/YLErpWeb/Controllers/clientController.cs @@ -671,7 +671,8 @@ namespace YLErp.Web.Controllers x.PayableMargin = clientBalance.PayableMargin; x.TwoSideMargin = clientBalance.TwoSideMargin; x.OtherSideMargin = -clientBalance.OtherSideMargin; - x.MySideMargin = clientBalance.MySideMargin; + //初始保证金金额=应付预付金流水收付净额(与每日估值报告"初始保证金金额"同口径,SwapInitMargin) + x.MySideMargin = clientBalance.SwapInitMargin; x.DeltaMargin = -clientBalance.DeltaMargin; x.IsPayableMarginManual = clientBalance?.IsPayableMarginManual; x.AvailableAmount = clientBalance.AvailableAmount; @@ -689,7 +690,9 @@ namespace YLErp.Web.Controllers x.EndDesirableFund = x.NetFund + x.SettlementBalance + clientBalance.EndPremiumSum; x.SwapMarketAmount= clientBalance.SwapMarketAmount; x.SwapMarketAmountPercent=clientBalance.SwapMarketAmountPercent; - x.MaintenanceMargin=clientBalance.MaintenanceMargin; + //维持保证金金额=−MySideMargin(client_span 维持保证金反号聚合,与每日估值报告"维持保证金金额"同口径; + //原取 client_span.VariationMargin——该列全库无写入方恒为0) + x.MaintenanceMargin = -(clientBalance.MySideMargin); x.NeedAddMargin=clientBalance.NeedAddMargin; x.LastDayRemainFund=clientBalance.LastDayRemainFund; if (clientBalance.MarginOccupation == 0) From 7bc70cee9f73d208dce807c29b2c606ef93821f5 Mon Sep 17 00:00:00 2001 From: ruisu Date: Thu, 27 Aug 2026 14:47:32 +0800 Subject: [PATCH 20/24] =?UTF-8?q?fix:=20=E8=A1=A5=E5=85=85=E8=B7=B3?= =?UTF-8?q?=E8=BF=87=E6=96=B0=E9=A3=8E=E6=8E=A7=E5=AE=A1=E8=AE=A1=E6=97=A5?= =?UTF-8?q?=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- YLErpWeb/Controllers/tradeController.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/YLErpWeb/Controllers/tradeController.cs b/YLErpWeb/Controllers/tradeController.cs index 1ac089bf..61b10fa3 100644 --- a/YLErpWeb/Controllers/tradeController.cs +++ b/YLErpWeb/Controllers/tradeController.cs @@ -2495,6 +2495,7 @@ namespace YLErp.Web.Controllers ignoreMoneyCheck = true; isSkipApproval = true; skipNewRiskCheck = true; + _logger.Info($"TradeConfirmRisk.SkipNewRisk tradeids:{tradeids}, isSkipCheck:{isSkipCheck}, ignoreMoneyCheck:{ignoreMoneyCheck}, isSkipApproval:{isSkipApproval}, skipNewRiskCheck:{skipNewRiskCheck}, userId:{CurUser?.UserId}"); } var result = new TradeConfirmService(CurUser).tradeConfirm(tradeidArr, ignoreMoneyCheck, isSkipApproval, ignoreRiskWarning, ignoreRiskRuleIdArr, skipNewRiskCheck); if (result.NewRiskBlocked || result.NewRiskNeedApproval || result.OldRiskNeedSpecialApproval || result.type == TradeOpenRetCode.QuotaTrialError.ToString() || result.type == TradeOpenRetCode.RiskWarning.ToString()) From 95cbff0faa9468391f7e79210d5a0c0785098c56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=94=A6=E9=BA=9F=20=E7=8E=8B?= Date: Thu, 27 Aug 2026 14:48:32 +0800 Subject: [PATCH 21/24] =?UTF-8?q?Bugfix=20=E7=B4=AF=E5=8A=A0=E9=A2=84?= =?UTF-8?q?=E4=BB=98=E9=87=91=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SwapAdditionalMarginCalcTest.cs | 17 +++++++ .../SwapModule/SwapSpanMarginCalcTest.cs | 49 +++++++++++++++++++ .../Margin/SwapAdditionalMarginService.cs | 21 ++++++-- .../SwapModule/Margin/SwapSpanMarginCalc.cs | 22 +++++++-- 4 files changed, 103 insertions(+), 6 deletions(-) diff --git a/UnitTestProject/Modules/SwapModule/SwapAdditionalMarginCalcTest.cs b/UnitTestProject/Modules/SwapModule/SwapAdditionalMarginCalcTest.cs index f1d27fa9..7069ed32 100644 --- a/UnitTestProject/Modules/SwapModule/SwapAdditionalMarginCalcTest.cs +++ b/UnitTestProject/Modules/SwapModule/SwapAdditionalMarginCalcTest.cs @@ -94,6 +94,23 @@ namespace YLErp.Modules.SwapModule Assert.AreEqual(20, day3, 1e-6); } + ///

eT+#%Xu9CI$DJE6K!q0a^1wy@ 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 literal 45533 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 M!2|nU#mlGv2j{@FSpWb4 diff --git a/Plugins/YLErp.Plugins.GuoLian/App_Docs/contract_template/国联民生-收益互换交易确认书-境内模板-【客户看空】-【债券ETF】-清洁版.docx b/Plugins/YLErp.Plugins.GuoLian/App_Docs/contract_template/国联民生-收益互换交易确认书-境内模板-【客户看空】-【债券ETF】-清洁版.docx index c6da85b2d2dcc899302e43c151de53c0fa54895a..f83854bc0094daa59e5bc54ae8a2e3ba7ef6f79f 100644 GIT binary patch delta 38132 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%0AV;>0hJQ!=sQ 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 S!XLdCI$#tM02t5zarA%wPvfot diff --git a/Plugins/YLErp.Plugins.GuoLian/App_Docs/contract_template/国联民生-收益互换交易确认书-境内模板-【客户看空】-【现券】-清洁版.docx b/Plugins/YLErp.Plugins.GuoLian/App_Docs/contract_template/国联民生-收益互换交易确认书-境内模板-【客户看空】-【现券】-清洁版.docx index 19243728bdd291a134e5cef14d16be3a7954b51f..b89c9ac5aaddebb5a121aa6b1e27231e8a02b48a 100644 GIT binary patch literal 40370 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 J%P(pl`ad;6(nbIP literal 48689 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 diff --git a/Plugins/YLErp.Plugins.GuoLian/DocumentGenerator/TradeConfirmationGenerator.cs b/Plugins/YLErp.Plugins.GuoLian/DocumentGenerator/TradeConfirmationGenerator.cs index d7d32888..e626cb4b 100644 --- a/Plugins/YLErp.Plugins.GuoLian/DocumentGenerator/TradeConfirmationGenerator.cs +++ b/Plugins/YLErp.Plugins.GuoLian/DocumentGenerator/TradeConfirmationGenerator.cs @@ -8,6 +8,7 @@ using YLErp.Modules.MarginModule; using YLErp.Modules.UnderlyingModule; using YLErp.Plugins.TradeDocGenerator; using YLErp.Plugins.TradeDocGenerator.Abstracts; +using YieldChain.Helpers; namespace YLErp.Plugins.GuoLian.DocumentGenerator { @@ -245,11 +246,26 @@ namespace YLErp.Plugins.GuoLian.DocumentGenerator } dic["主协议编号"] = mainProtocolCode ?? ""; - // 主协议类型:仅 NAFMII 使用中国银行间市场协议,其余类型按 SAC 展示。 + // 主协议类型取客户开户维护的下拉选择(client_meta.MainProtocolType):1=NAFMII,其余按 SAC。 var mainProtocolType = Context.GetClientMeta(client.id, "MainProtocolType")?.MetaValue; var isNafmii = mainProtocolType == "1"; - dic["IsSac"] = !isNafmii; - dic["IsNafmii"] = isNafmii; + if (string.IsNullOrWhiteSpace(mainProtocolType)) + { + LogFactory.GetLogger("确认书生成").Info($"客户 {client.Number} {client.Name} 未维护主协议类型,确认书协议段按 SAC 勾选展示"); + } + + // 协议段勾选框对应模板占位符,按客户签署的主协议类型动态勾选,替代模板中硬编码的 Wingdings 2 复选框 + static string Check(bool on) => on ? "☑" : "□"; + dic["主协议SAC勾选"] = Check(!isNafmii); + dic["主协议NAFMII勾选"] = Check(isNafmii); + dic["补充协议SAC勾选"] = Check(!isNafmii); + dic["补充协议NAFMII勾选"] = Check(isNafmii); + // 定义文件签署维度暂无客户协议数据,统一展示空框,待客户资料补齐后接入 + dic["协会证券业勾选"] = "□"; + dic["协会交易商勾选"] = "□"; + dic["定义文件商品勾选"] = "□"; + dic["定义文件利率勾选"] = "□"; + dic["定义文件债券勾选"] = "□"; // 补充协议编号:优先取 client 表字段,为空时从 client_meta 表兜底 var supProtocolCode = client.SupProtocolCode; diff --git a/UnitTestProject/PluginTests/TestGuoLianConfirmTemplate.cs b/UnitTestProject/PluginTests/TestGuoLianConfirmTemplate.cs new file mode 100644 index 00000000..b06302f9 --- /dev/null +++ b/UnitTestProject/PluginTests/TestGuoLianConfirmTemplate.cs @@ -0,0 +1,86 @@ +using System.IO.Compression; +using System.Text; +using Newtonsoft.Json.Linq; +using YLErp.Office.Converters; + +namespace YLErp.PluginTests +{ + ///