using NPOI.SS.Formula.Functions; using Qdp.Pricing.Base.Utilities; using Qdp.Pricing.Library.Base.Utilities; using System.ComponentModel.DataAnnotations.Schema; using YLErp.Model; namespace YLErp.Modules.SuperviseReportModule.ExtendReport.GeLin { /// /// 客户持仓信息报表 /// public class ClientPositionReport : ExtendReportBaseService { public ClientPositionReport(OptUserInfo userInfo, SuperviseReportReq req) : base(userInfo, req) { } public override string TemplateName => "客户持仓信息报表.xlsx"; public override string TargetFileName => $"{RequestInfo.ValueDate:yyyy-MM-dd}~{RequestInfo.EndDate:yyyy-MM-dd}客户持仓信息报表.xlsx"; public override Dictionary SearchReportInfo() { //结束 //客户持仓名义本金 var tradeList = DbContext.eod_trade.Where(s => s.ValueDate >= RequestInfo.ValueDate &&s.ParentTradeId==0 && s.ValueDate <= RequestInfo.EndDate).Select(s => new xodTradeBase() { ValueDate = s.ValueDate, TradeJson = s.TradeJson, }).ToList().Select(O => new { O.ValueDate, ClientId = O.trade.ClientId, StockEqvNotional = O.trade.StockEqvNotional }).GroupBy(s => s.ValueDate).ToList(); var positionNotionalList = new List(); var positionCountList = new List(); foreach (var item in tradeList) { var date = item.Key; var clientCount = item.GroupBy(s => s.ClientId).Distinct(); positionCountList.Add( new GeLin_ClientPositionCount() { valueDate = date, PositionCount = clientCount.Count() }); foreach (var items in clientCount) { var sumParemoney = items.Sum(s => s.StockEqvNotional); var client = DataCacheProvider.GetClientDataSource().GetData(items.Key); positionNotionalList.Add( new GeLin_ClientPositionNotional() { valueDate = date, ClientNumber = client.Number, ClientName = client.Name, StockEqvNotional = sumParemoney }); } } return new Dictionary() { {"持仓客户数量", positionCountList}, {"客户持仓名义本金", positionNotionalList} }; } public class GeLin_ClientPositionNotional { public DateTime valueDate { get; set; } public string ClientNumber { get; set; } public string ClientName { get; set; } public double StockEqvNotional { get; set; } } public class GeLin_ClientPositionCount { public DateTime valueDate { get; set; } public int PositionCount { get; set; } } } }