feat(swaptrade): 添加期末头寸风险表新字段支持
- 在EodSwap实体模型中新增标的类型、期间付息/分红、保证金利息收支字段 - 在前端表格列模型中添加标的类型、期间付息/分红列定义 - 在前端表格分组配置中将新字段归入对应分组显示 - 实现后端服务中对新字段的数据查询和计算逻辑 - 添加保证金利息收入支出的分类汇总功能 - 完善标的类型字段的数据源获取和展示逻辑
This commit is contained in:
@@ -2162,10 +2162,40 @@ namespace YLErp.Modules.SwapModule
|
||||
}
|
||||
DbContext.SetDebugLog();
|
||||
var retListResult = query.ToSearchList(req);
|
||||
var tradeIds = retListResult.rows.Select(x => x.position.SwapTradeId).Distinct().ToList();
|
||||
var valueDates = retListResult.rows.Select(x => x.position.ValueDate).Distinct().ToList();
|
||||
var eodPositionDetails = DbContext.eod_swap_position
|
||||
.Where(x => tradeIds.Contains(x.SwapTradeId) && valueDates.Contains(x.ValueDate) && !x.Invalid)
|
||||
.ToList();
|
||||
var underlyingDataSource = DataCacheProvider.GetUnderlyingDataSource();
|
||||
var varietyDataSource = DataCacheProvider.GetVarietyDataSource();
|
||||
foreach (var item in retListResult.rows)
|
||||
{
|
||||
var client = DataCacheProvider.GetClientDataSource().GetData(item.ClientId);
|
||||
item.SwapTradeTypeStr = client?.SwapTradeTypeStr;
|
||||
var details = eodPositionDetails
|
||||
.Where(x => x.SwapTradeId == item.position.SwapTradeId && x.ValueDate == item.position.ValueDate)
|
||||
.ToList();
|
||||
var floatingLegs = details.Where(x => !string.IsNullOrEmpty(x.UnderlyingCode)).ToList();
|
||||
var marginLegs = details.Where(x => marginTypes.Contains(x.InterestMode)).ToList();
|
||||
|
||||
item.UnderlyingType = string.Join(",", floatingLegs
|
||||
.Select(x =>
|
||||
{
|
||||
var underlying = underlyingDataSource.GetData(x.UnderlyingCode);
|
||||
return varietyDataSource.GetData(underlying?.UnderlyingTypeId ?? 0)?.AssetType
|
||||
?? underlying?.UnderlyingInstrumentTypeCn
|
||||
?? underlying?.UnderlyingType;
|
||||
})
|
||||
.Where(x => !string.IsNullOrWhiteSpace(x))
|
||||
.Distinct());
|
||||
item.PeriodAmount = floatingLegs.Sum(x => x.PosiDividendSum); // 分红 - 为实现
|
||||
item.MarginInterestGain = marginLegs
|
||||
.Where(x => x.InterestDirection == (int)SwapDirectionEnum.收取)
|
||||
.Sum(x => Math.Abs(x.InterestIncomeSum));
|
||||
item.MarginInterestLoss = marginLegs
|
||||
.Where(x => x.InterestDirection == (int)SwapDirectionEnum.支付)
|
||||
.Sum(x => Math.Abs(x.InterestIncomeSum));
|
||||
}
|
||||
|
||||
var dv01 = query.Sum(O => O.position.dv01??0);
|
||||
|
||||
Reference in New Issue
Block a user