using Microsoft.EntityFrameworkCore; using YLErp.DBModels; using YLErp.Modules; namespace YLErp.Tests { class InitTianFengExchangeTrades { public void Execute() { var valueDate = new DateTime(2021, 5, 31); var db = DbContextFactory.GetYLDbContext(); var unDic = db.underlying_manager.Select(n => new { n.id, n.UnderlyingCode }) .ToDictionary(n => n.UnderlyingCode, n => n.id, StringComparer.OrdinalIgnoreCase); var exchangeAccountDic = db.exchange_account.Select(n => new { n.AccountCode, n.id }) .ToDictionary(n => n.AccountCode, m => m.id, StringComparer.OrdinalIgnoreCase); var eodPosList = db.eod_trade_position_static2.AsNoTracking() .Where(n => n.ValueDate == valueDate && n.Volume > 0).ToArray(); foreach (var ep in eodPosList) { var accCodeArr = ep.AccountCode.Split('/'); if (accCodeArr.Length != 3) continue; var accountCode = $"{accCodeArr[0]}#{accCodeArr[2]}"; if (!exchangeAccountDic.TryGetValue(accountCode, out var accId)) continue; if (ep.TradeType == "场内期权") { if (ep.UnderlyingCode == ep.OptionCode && ep.UnderlyingCode.Length == 9 && (ep.UnderlyingCode.EndsWith("SH") || ep.UnderlyingCode.EndsWith("SZ"))) { ep.TradeType = "股票"; } else { continue; } } if (!unDic.TryGetValue(ep.UnderlyingCode, out var unId)) continue; var trade = new ExchangeTrade { AssetBookId = 4, Comments = "", Commission = 0, CommissionType = DBModels.Enums.CommissionType.不收取, CreateTime = DateTime.Now, ExchangeAccountCode = accountCode, ExchangeAccountId = accId, ExerciseMode = string.Empty, InstrumentType = string.Empty, IsValid = true, MaturityDate = null, Notional = ep.Volume, OptDate = DateTime.Now, OptId = 0, OptionCode = null, OptionStrike = null, OptionType = null, OptName = "系统", TradeAmount = ep.Volume, TradeDate = valueDate, TradeLots = ep.Volume / 100, TradeNumber = string.Empty, TraderId = 7, TraderName = "高宇辰", TradeSide = ConsGlobal.TradeSide.多头开仓, TradeSinglePrice = ep.PositionPrice, TradeSource = "系统", TradeType = ep.TradeType, UnderlyingCode = ep.UnderlyingCode, UnderlyingId = unId }; db.ExchangeTrade.Add(trade); } db.SaveChanges(); } } }