157 lines
5.5 KiB
C#
157 lines
5.5 KiB
C#
namespace YLErp.Modules.EodModule.QueryModule
|
|
{
|
|
/// <summary>
|
|
/// 日终清算--了结信息流水
|
|
/// </summary>
|
|
public class EodCloseInfoQueryService : YLBaseService<EodSettleInfoQueryContext>
|
|
{
|
|
public EodCloseInfoQueryService(EodSettleInfoQueryContext context) : base(context)
|
|
{
|
|
|
|
}
|
|
|
|
public IEnumerable<EodCloseInfoField> GetEodCloseInfoList(DateTime valueDate, List<int> clientIdsOfInside = null)
|
|
{
|
|
valueDate = valueDate.Date;
|
|
|
|
var tradeQuery = DbContext.trade.AsQueryable();
|
|
if (clientIdsOfInside != null)
|
|
{
|
|
tradeQuery = tradeQuery.Where(a => !clientIdsOfInside.Contains(a.ClientId));
|
|
}
|
|
|
|
var query = from tc in DbContext.trade_cash
|
|
join td in tradeQuery on tc.TradeId equals td.id
|
|
//join tcSwap in DbContext.trade_cash_swap on tc.id equals tcSwap.TradeId into tcSwap_t
|
|
//from tcSwap in tcSwap_t.DefaultIfEmpty()
|
|
where tc.ValueDate == valueDate && tc.ValidState != ConsGlobal.InValid && !tc.IsDeleted
|
|
&& (tc.Action == ClientCashInCashOut.系统操作_行权费 || tc.Action == ClientCashInCashOut.系统操作_平仓费
|
|
|| tc.Action == ClientCashInCashOut.系统操作_票息 && tc.IsLastAction)
|
|
&& td.ValidState != ConsGlobal.InValid && td.IsGroup != 2
|
|
select new
|
|
{
|
|
td.ClientId,
|
|
td.TradeNumber,
|
|
td.TradeType,
|
|
td.StructureType,
|
|
td.TradePrice,
|
|
td.BuySell,
|
|
|
|
td.TradeDate,
|
|
td.OptionType,
|
|
td.UnderlyingCode,
|
|
|
|
tcAction = tc.Action,
|
|
tcAmount = tc.Amount,
|
|
tc.UnwindPercentRate
|
|
};
|
|
|
|
var datas = query.ToArray();
|
|
|
|
var list = new List<EodCloseInfoField>(datas.Length);
|
|
var tradeNumberList = datas.Where(O => O.TradeType == "收益互换").Select(O => O.TradeNumber).ToHashSet();
|
|
var swapDict = (from t in DbContext.trade
|
|
join ts in DbContext.trade_swap
|
|
on t.id equals ts.TradeId
|
|
where tradeNumberList.Contains(t.TradeNumber)
|
|
select new
|
|
{
|
|
t.TradeNumber,
|
|
LongShort = ts.IsGetFloatingProfit ? ts.GetLongShort : ts.PayLongShort,
|
|
}).ToDictionary(K => K.TradeNumber, V => V.LongShort);
|
|
|
|
foreach (var n in datas)
|
|
{
|
|
var um = DataCacheProvider.GetUnderlyingDataSource().GetData(n.UnderlyingCode);
|
|
|
|
var f = new EodCloseInfoField
|
|
{
|
|
TradeNumber = n.TradeNumber,
|
|
TradeType = n.TradeType,
|
|
StructureType = n.StructureType,
|
|
TradeSide = n.BuySell,
|
|
TradeDate = n.TradeDate.OtcFormatDate(),
|
|
CallPut = n.TradeType == "收益互换" && swapDict.ContainsKey(n.TradeNumber) ? swapDict[n.TradeNumber] : ConsGlobal.CallPut.IsCall(n.OptionType) ? "多头" : "空头",
|
|
UnderlyingCode = n.UnderlyingCode,
|
|
UnderlyingName = um?.UnderlyingName,
|
|
CloseFee = 0,
|
|
|
|
ClientNumber = null,
|
|
|
|
CloseProfit = CalculationModule.TradeCalcHelper.CalcWinLoss(tradeType: n.TradeType, buySell: n.BuySell, tradePrice: n.TradePrice ?? 0, tcUnwindPercent: n.UnwindPercentRate ?? 0, tcAmount: n.tcAmount)
|
|
};
|
|
|
|
if (_context.TryGetClientInfo(n.ClientId, out var clientInfo))
|
|
{
|
|
f.ClientNumber = clientInfo.Number;
|
|
}
|
|
|
|
list.Add(f);
|
|
}
|
|
|
|
return list;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 日终清算--了结信息流水
|
|
/// </summary>
|
|
public class EodCloseInfoField
|
|
{
|
|
/// <summary>
|
|
/// 交易编号
|
|
/// </summary>
|
|
public string TradeNumber { get; set; }
|
|
|
|
/// <summary>
|
|
/// 子账户编码
|
|
/// </summary>
|
|
public string ClientNumber { get; set; }
|
|
|
|
/// <summary>
|
|
/// 交易类型
|
|
/// </summary>
|
|
public string TradeType { get; set; }
|
|
|
|
/// <summary>
|
|
/// 交易日期
|
|
/// </summary>
|
|
public string TradeDate { get; set; }
|
|
|
|
/// <summary>
|
|
/// 交易方向
|
|
/// </summary>
|
|
public string TradeSide { get; set; }
|
|
|
|
/// <summary>
|
|
/// 看涨看跌
|
|
/// </summary>
|
|
public string CallPut { get; set; }
|
|
|
|
/// <summary>
|
|
/// 标的代码
|
|
/// </summary>
|
|
public string UnderlyingCode { get; set; }
|
|
|
|
/// <summary>
|
|
/// 标的名称
|
|
/// </summary>
|
|
public string UnderlyingName { get; set; }
|
|
|
|
/// <summary>
|
|
/// 结构类型
|
|
/// </summary>
|
|
public string StructureType { get; set; }
|
|
|
|
/// <summary>
|
|
/// 平仓盈亏
|
|
/// </summary>
|
|
public double CloseProfit { get; set; }
|
|
|
|
/// <summary>
|
|
/// 手续费
|
|
/// </summary>
|
|
public double CloseFee { get; set; }
|
|
}
|
|
}
|