fix: 计算平仓分红

This commit is contained in:
gongpei
2025-10-23 18:58:26 +08:00
parent 8b8eb19ddc
commit 5ee62775b7
+14 -3
View File
@@ -910,10 +910,21 @@ namespace YLErp.Modules.SwapModule
private void EnrichDividendIn(swap_flow_event flowEvent, decimal unwindQty)
{
// 平仓数量/平仓前的数量*平仓对象的待实现分红收益,保留2位小数
var yest = QdpCalendarHelper.GetNonHolidayDefore(flowEvent.EventDate.AddDays(-1));
var eod = DbContext.eod_swap_position.Where(e => e.SwapTradeId == flowEvent.SwapTradeId && !e.Invalid && e.PosiQuantity > 0 && e.ValueDate == yest).FirstOrDefault();
if (flowEvent.UnwindDate == null) {
throw new ArgumentNullException("平仓日期缺失");
}
var date = flowEvent.UnwindDate.GetValueOrDefault();
var preDate = date.AddDays(-1);
// 平仓数量/平仓前的数量 * 上一自然日待实现分红收益,保留2位小数
var eod = DbContext.eod_swap_position.Where(e => e.SwapTradeId == flowEvent.SwapTradeId && !e.Invalid && e.PosiQuantity > 0 && e.ValueDate == preDate).FirstOrDefault();
var dividendIn = eod.PosiDividendSum * unwindQty / eod.PosiQuantity;
// + 付息日>上日日终且小于等于平仓日期的分红数据
BondPaymentService servie = new BondPaymentService(UserInfo);
var payments = servie.GetBondPayments(flowEvent.UnderlyingCode, preDate, date);
int shortRatio = flowEvent.PositionType == (int)PositionTypeFlag.Long ? 1 : -1;
int directionRatio = flowEvent.PayDirection == (int)SwapDirectionEnum. ? 1 : -1;
dividendIn = dividendIn + servie.CalcPayment(payments, unwindQty, shortRatio, directionRatio);
flowEvent.DividendIn = Math.Round(dividendIn, 2, MidpointRounding.AwayFromZero);
}