从山证v2.3.0拷贝
This commit is contained in:
@@ -0,0 +1,156 @@
|
||||
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; }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user