BugFix 平仓互换平仓,导致页面的分红不对

This commit is contained in:
锦麟 王
2026-06-26 17:17:55 +08:00
parent d9fc5965d3
commit 87671fcece
3 changed files with 12 additions and 7 deletions
@@ -102,7 +102,7 @@ namespace YLErp.Web.Controllers
decimal consumedDividend = 0;
if (tradeId.HasValue)
{
List<int> swapEventTypes = new List<int>() { (int)SwapEventTypeEnum., (int)SwapEventTypeEnum. };
List<int> swapEventTypes = new List<int>() { (int)SwapEventTypeEnum., (int)SwapEventTypeEnum.,(int)SwapEventTypeEnum. };
consumedDividend = yldb.swap_flow_event
.Where(x => x.SwapTradeId == tradeId.Value
&& swapEventTypes.Contains(x.EventType)
@@ -194,8 +194,8 @@ const vue = new Vue({
let floatRatio = this.floatPosition.PayDirection == 1 ? 1 : -1;
var postData = { startDate: thisObj.TradeStartDate, endDate: thisObj.deal.UnwindDate, underlyingCode: thisObj.floatPosition.UnderlyingCode, tradeId: thisObj.deal.SwapTradeId, unwindDate: thisObj.deal.UnwindDate }
main.post("/BondPayment/GetBondPayMentInterest", postData, { async: false }).done(function (resp) {
let totalDividend = parseFloat(thisObj.deal.PositionQty) * resp.obj.totalInterest * ratio * floatRatio;
let consumedDividend = Math.abs(parseFloat(resp.obj.consumedDividend ?? 0)) * ratio * floatRatio;
let totalDividend = parseFloat(thisObj.deal.NotionalQty) * resp.obj.totalInterest * ratio * floatRatio;//总的
let consumedDividend = Math.abs(parseFloat(resp.obj.consumedDividend ?? 0)) * ratio * floatRatio;//已实现的
// 互换是全量消费,consumedDividend>0 表示分红已被当天互换消费,归0
thisObj.floatPosition.DividendIn = Math.abs(consumedDividend) > 0 ? parseFloat((totalDividend - consumedDividend).toFixed(2)) : parseFloat(totalDividend.toFixed(2));
thisObj.floatPosition.DividendPending = 0;
@@ -280,13 +280,18 @@ const vue = new Vue({
let floatRatio = this.floatPosition.PayDirection == 1 ? 1 : -1;
var postData = { startDate: thisObj.TradeStartDate, endDate: thisObj.deal.UnwindDate, underlyingCode: thisObj.floatPosition.UnderlyingCode, tradeId: thisObj.deal.SwapTradeId, unwindDate: thisObj.deal.UnwindDate }
main.post("/BondPayment/GetBondPayMentInterest", postData, { async: false }).done(function (resp) {
let consumedDividend = Math.abs(parseFloat(resp.obj.consumedDividend ?? 0));//保持和totalInterest同向
let consumedDividendInterest = consumedDividend / parseFloat(thisObj.deal.NotionalQty)
let consumedDividend = Math.abs(parseFloat(resp.obj.consumedDividend ?? 0)) * ratio * floatRatio;//已实现的
let totalDividend = parseFloat(thisObj.deal.NotionalQty) * resp.obj.totalInterest * ratio * floatRatio;
let remainDividend = totalDividend - consumedDividend;
let dividendIn = 0;
if (remainDividend != 0) {
dividendIn = parseFloat(thisObj.deal.CloseQty) / parseFloat(thisObj.floatPosition.Quantity) * remainDividend
}
// 这里计算已经分红的利息,从totalInterest里扣除
let totalDividend = parseFloat(thisObj.deal.CloseQty) * (resp.obj.totalInterest - consumedDividendInterest) * ratio * floatRatio;
// 互换是全量消费,consumedDividend>0 表示分红已被当天互换消费,归0
// 现在可能做了纯分红的互换结算,所以不能直接归0
thisObj.floatPosition.DividendIn = parseFloat(totalDividend.toFixed(2));
thisObj.floatPosition.DividendIn = parseFloat(dividendIn.toFixed(2));
var posiQty = parseFloat(thisObj.floatPosition.Quantity) - parseFloat(thisObj.deal.CloseQty);
thisObj.floatPosition.DividendPending = parseFloat((posiQty * resp.obj.totalInterest * ratio * floatRatio).toFixed(2));
thisObj.calcFloatClosePnl();