互换估值bug修复

This commit is contained in:
吴方海
2025-05-29 11:05:29 +08:00
parent 083848fb62
commit 23dabc7f86
7 changed files with 21 additions and 9 deletions
@@ -458,7 +458,7 @@ namespace YLErp.Modules.SwapModule
// List<int> eventTyps = new List<int>() { (int)SwapEventTypeEnum.平仓, (int)SwapEventTypeEnum.互换, (int)SwapEventTypeEnum.自动互换 };
var predicate = PredicateBuilder.Create<swap_flow_event>(n => n.DataState == (int)SwapFlowDateStateEnum. );
var tradePredicate = PredicateBuilder.Create<trade>(n => n.TradeType == "收益互换"
&& n.ValidState != "InValid");
&& n.ValidState == ConsGlobal.Valid);
if (req.ClientId > 0)
{
tradePredicate = tradePredicate.And(x => x.ClientId == req.ClientId);
@@ -471,12 +471,13 @@ namespace YLErp.Modules.SwapModule
{
predicate = predicate.And(x => x.EventDate <= req.ValueDate);
}
DbContext.SetDebugLog();
var positionQuery = DbContext.swap_flow_event.Where(predicate);
var tradeQuery = DbContext.trade.Where(tradePredicate);
var query = from flow in positionQuery
join td in tradeQuery on flow.SwapTradeId equals td.id
join posi in DbContext.swap_position on flow.PositionId equals posi.PositionId
join tr in DbContext.trade_contract_r on td.id equals tr.TradeId into tradeContractGroup
var query = from td in tradeQuery
//join posi in DbContext.swap_position.Where(s=>!s.Invalid&&s.IsInitial) on td.id equals posi.SwapTradeId
join flow in positionQuery on td.id equals flow.SwapTradeId
join tr in DbContext.trade_contract_r.Where(x=>x.IsValid&&x.Type=="交易确认书") on td.id equals tr.TradeId into tradeContractGroup
from tradeContract in tradeContractGroup.DefaultIfEmpty()
select new ClientSwapPositionResponse
{
@@ -486,7 +487,7 @@ namespace YLErp.Modules.SwapModule
ClientName = td.ClientName,
ClientId = td.ClientId,
ContractCode = tradeContract.ContractCode,
FloatRateUnderlyingCode=posi.FloatRateUnderlyingCode,
// FloatRateUnderlyingCode=posi.FloatRateUnderlyingCode,
StartDate = td.StartDate.Value,
};
if (string.IsNullOrEmpty(req.sidx))
@@ -495,6 +496,8 @@ namespace YLErp.Modules.SwapModule
req.sord = "asc";
}
var retListResult = query.ToSearchList(req);
var tds= retListResult.rows.Select(x => x.FlowEvent.SwapTradeId).Distinct().ToList();
var posiList = DbContext.swap_position.Where(s => !s.Invalid && s.IsInitial && tds.Contains(s.SwapTradeId)&&!string.IsNullOrEmpty(s.FloatRateUnderlyingCode)).ToList();
foreach (var item in retListResult.rows)
{
item.FlowEvent.DividendPending = -item.FlowEvent.DividendPending;
@@ -504,7 +507,9 @@ namespace YLErp.Modules.SwapModule
item.FlowEvent.InterestFee = -item.FlowEvent.InterestFee;
item.FlowEvent.TradingFee = -item.FlowEvent.TradingFee;
item.FlowEvent.TradingFeePending = -item.FlowEvent.TradingFeePending;
item.FlowEvent.InterestClosePnL = -item.FlowEvent.InterestClosePnL;
var posi= posiList.FirstOrDefault(s => s.id == item.FlowEvent.PositionId);
item.FloatRateUnderlyingCode= posi?.FloatRateUnderlyingCode;
if (item.FlowEvent.EventType==(int)SwapFlowEventTypeEnum.)
{
item.TradeFee = 0;