代码结构修改
This commit is contained in:
@@ -1372,34 +1372,28 @@ namespace YLErp.BLL.Eod
|
||||
private void ProcessClientSwap(DateTime lastSettletDate, DateTime startDate)
|
||||
{
|
||||
var clientIds = _clientBalanceDic.Keys;
|
||||
var positionList = DbContext.trade.Where(t => (ConsTrade.PositionTradeStatusList.Contains(t.TradeStatus)) && clientIds.Contains(t.ClientId) && t.ValidState != "InValid" && t.TradeType == "收益互换");
|
||||
var marignQuery = from t in positionList
|
||||
join s in DbContext.swap_position on t.id equals s.SwapTradeId
|
||||
where !s.IsInitial && !s.Invalid
|
||||
select new
|
||||
{
|
||||
ClientId=t.ClientId,
|
||||
StructureType=t.StructureType,
|
||||
Position=s,
|
||||
margin= s.InterestPrincipalFix*(s.InterestDirection==1?-1:1)
|
||||
};
|
||||
var marginQueryGroup = marignQuery.ToList().GroupBy(t => t.ClientId);
|
||||
foreach (var marginItem in marginQueryGroup)
|
||||
var trades = DbContext.trade.Where(t => (ConsTrade.PositionTradeStatusList.Contains(t.TradeStatus)) && clientIds.Contains(t.ClientId) && t.ValidState != "InValid" && t.TradeType == "收益互换").Select(s => new {s.id,s.ClientId }).ToList();
|
||||
var tradeIds = trades.Select(s=>s.id).ToList();
|
||||
var positions = DbContext.swap_position.Where(s => tradeIds.Contains(s.SwapTradeId) && !s.IsInitial && !s.Invalid).ToList();
|
||||
var queryGroup = trades.GroupBy(t => t.ClientId);
|
||||
foreach (var item in queryGroup)
|
||||
{
|
||||
var balance = _clientBalanceDic[marginItem.Key];
|
||||
var marginList = marginItem.Where(x => x.StructureType != "多空组合"&& ConsTrade.InterestMarginModels.Contains(x.Position.InterestMode)).Sum(s=>s.Position.InterestPrincipalFix * (s.Position.InterestDirection == 1 ? -1 : 1));
|
||||
var balance = _clientBalanceDic[item.Key];
|
||||
var clientTradeIds = item.Select(s => s.id).ToList();
|
||||
var clientPositions = positions.Where(x => clientTradeIds.Contains(x.SwapTradeId)).ToList();
|
||||
var marginList = clientPositions.Where(x =>ConsTrade.InterestMarginModels.Contains(x.InterestMode)).Sum(s=>s.InterestPrincipalFix * (s.InterestDirection == 1 ? -1 : 1));
|
||||
balance.SwapMargin =Convert.ToDouble(marginList);
|
||||
var positions= marginItem.Where(x => x.Position.PosiQuantity > 0);
|
||||
balance.PositionCount= positions.Select(s=>s.Position.SwapTradeId).Distinct().Count();
|
||||
balance.PositionNotionalPrincipal = Convert.ToDouble(positions.Sum(s=>s.Position.PosiNotionalValue));//实时
|
||||
var floatPositions= positions.Where(x => x.PosiQuantity > 0);
|
||||
balance.PositionCount= tradeIds.Count();
|
||||
balance.PositionNotionalPrincipal = Convert.ToDouble(positions.Sum(s=>s.PosiNotionalValue));//实时
|
||||
}
|
||||
var eodSwapQuery = DbContext.eod_swap.Where(x => clientIds.Contains(x.ClientId) && x.ValueDate >= lastSettletDate && x.ValueDate <= startDate).GroupBy(x => x.SwapTradeId)
|
||||
.Select(g => g.OrderByDescending(x => x.ValueDate).FirstOrDefault()).ToList();
|
||||
var tradeIds = eodSwapQuery.Select(s => s.SwapTradeId).ToList();
|
||||
var trades = DbContext.trade.Where(t => (ConsTrade.TradeStatusAfterConfirmed.Contains(t.TradeStatus)) && tradeIds.Contains(t.id) && t.ValidState != "InValid" && startDate >= t.StartDate);
|
||||
tradeIds = trades.Select(s => s.id).ToList();
|
||||
eodSwapQuery = eodSwapQuery.Where(x => tradeIds.Contains(x.SwapTradeId)).ToList();
|
||||
var eodSwapPositions = DbContext.eod_swap_position.Where(x => tradeIds.Contains(x.SwapTradeId) && x.ValueDate >= lastSettletDate && x.ValueDate <= startDate && x.PosiDirection > 0);
|
||||
var eodTradeIds = eodSwapQuery.Select(s => s.SwapTradeId).ToList();
|
||||
var eodTrades = DbContext.trade.Where(t => (ConsTrade.TradeStatusAfterConfirmed.Contains(t.TradeStatus)) && tradeIds.Contains(t.id) && t.ValidState != "InValid" && startDate >= t.StartDate);
|
||||
eodTradeIds = eodTrades.Select(s => s.id).ToList();
|
||||
eodSwapQuery = eodSwapQuery.Where(x => eodTradeIds.Contains(x.SwapTradeId)).ToList();
|
||||
var eodSwapPositions = DbContext.eod_swap_position.Where(x => eodTradeIds.Contains(x.SwapTradeId) && x.ValueDate >= lastSettletDate && x.ValueDate <= startDate && x.PosiDirection > 0);
|
||||
var eodSwaps = eodSwapQuery.GroupBy(g => g.ClientId).ToList();
|
||||
foreach (var data in eodSwaps)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user