From 23108016a4ec10c0bb3d5c4bb6817d8e65b1f207 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=94=A6=E9=BA=9F=20=E7=8E=8B?= Date: Thu, 16 Jul 2026 10:04:06 +0800 Subject: [PATCH] =?UTF-8?q?BugFix=20=E4=BA=92=E6=8D=A2=E6=9C=AC=E6=AC=A1?= =?UTF-8?q?=E5=90=8D=E4=B9=89=E6=9C=AC=E9=87=91=E5=8F=96=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Modules/TradeModule/TradeServiceBase.cs | 39 +++++++++++++++---- 1 file changed, 32 insertions(+), 7 deletions(-) diff --git a/YLErpDAL/Modules/TradeModule/TradeServiceBase.cs b/YLErpDAL/Modules/TradeModule/TradeServiceBase.cs index ef5d6cc3..e78e82ff 100644 --- a/YLErpDAL/Modules/TradeModule/TradeServiceBase.cs +++ b/YLErpDAL/Modules/TradeModule/TradeServiceBase.cs @@ -199,16 +199,41 @@ namespace YLErp.Modules.TradeModule ProcessCategory = ResolveProcessCategory(td), InitGroupId = UserBLL.GetApprovalProcessGroup(userId) }; - // 了结场景:当次平仓名义本金 = 期初名义本金 × 平仓比例(UnwindPercentRate),取绝对值 + // 了结场景:取本次平仓名义本金 if (td != null && ctx.ProcessCategory == ProcessCategoryConst.Close) { - var tc = DbContext.trade_cash - .Where(t => t.TradeId == td.id && t.ValidState == ConsGlobal.InValid && !t.IsDeleted) - .OrderByDescending(t => t.id) - .FirstOrDefault(); - if (tc != null && tc.UnwindPercentRate.HasValue && td.OriginalStockEqvNotional.HasValue) + if (td.TradeType == "收益互换") { - ctx.CurrentNotional = Math.Abs(td.OriginalStockEqvNotional.Value * tc.UnwindPercentRate.Value); + // 互换:从 swap_event.EventData(JSON) 反序列化取 CloseNotionalValue + var swapEvent = DbContext.swap_event + .Where(x => x.SwapTradeId == td.id && !x.Invalid + && (x.EventType == (int)SwapEventTypeEnum.平仓 || x.EventType == (int)SwapEventTypeEnum.互换)) + .OrderByDescending(x => x.id) + .FirstOrDefault(); + if (swapEvent != null && !string.IsNullOrEmpty(swapEvent.EventData)) + { + try + { + var unwindData = Newtonsoft.Json.JsonConvert.DeserializeObject(swapEvent.EventData); + if (unwindData != null) + { + ctx.CurrentNotional = Math.Abs((double)unwindData.CloseNotionalValue); + } + } + catch { } + } + } + else + { + // 期权:当次平仓名义本金 = 期初名义本金 × 平仓比例(UnwindPercentRate),取绝对值 + var tc = DbContext.trade_cash + .Where(t => t.TradeId == td.id && t.ValidState == ConsGlobal.InValid && !t.IsDeleted) + .OrderByDescending(t => t.id) + .FirstOrDefault(); + if (tc != null && tc.UnwindPercentRate.HasValue && td.OriginalStockEqvNotional.HasValue) + { + ctx.CurrentNotional = Math.Abs(td.OriginalStockEqvNotional.Value * tc.UnwindPercentRate.Value); + } } } return ctx;