using YLErp.Modules.DataProviderModule; namespace YLErp.Modules.EodModule.SettlementModule { public class EodCheckPriceService : YLBaseService { public EodCheckPriceService(OptUserInfo userInfo) : base(userInfo) { } public List GetNoPriceUnderlyings(DateTime date) { if (date.DayOfWeek == DayOfWeek.Saturday || date.DayOfWeek == DayOfWeek.Sunday) { return null; } var positionStatus = ConsTrade.PositionTradeStatusList; var PreSettleDate = BLL.valuedateBLL.GetNonHolidayDefore(date.AddDays(-1)); var predicate = PredicateBuilder.Create(t => t.ClientId > 0 && t.ExerciseDate >= date && t.TradeDate <= date && (t.TradeType != "结构化交易" && t.IsGroup != 1 || t.IsGroup == 1 && t.TradeType == "结构化交易") && (t.IsGroup != 2 || t.IsGroup == 2 && t.TradeType == "收益互换") && t.ValidState != "InValid"); var query = (from t in DbContext.trade.Where(predicate) select new { t.id, t.UnderlyingCode, t.TradeStatus }).ToArray(); var needCashesTradeId = query.Where(o => !positionStatus.Contains(o.TradeStatus)).Select(o => o.id).ToArray(); var tradeCashes = DbContext.trade_cash.Where(o => needCashesTradeId.Contains(o.TradeId) && o.ValueDate < date && o.ValidState != "InValid" && o.UnwindType == "全部平仓"); var settledTradeIds = tradeCashes.Select(o => o.TradeId); query = query.Where(t => !settledTradeIds.Contains(t.id)).ToArray(); var exStatus = new ExchangeStatus(date, PreSettleDate); var eodPriceProvider = new EodPriceProvider(date, isDiviendPrice: false).Initialize(); var codeArr = query.Select(o => o.UnderlyingCode).Where(n => !string.IsNullOrEmpty(n)).Distinct().ToArray(); var umCodes = codeArr.Where(n => !eodPriceProvider.HasValue(n)).ToList(); var hoildayCodes = new List(); foreach (var n in umCodes) { var un = DataCacheProvider.GetUnderlyingDataSource().GetData(n); if (exStatus.IsHoliday(un.MarketCode)) { hoildayCodes.Add(n); } } if (hoildayCodes != null && hoildayCodes.Count > 0) { foreach (var item in hoildayCodes) { umCodes.Remove(item); } } return umCodes; } public Byte[] exportNoPriceUnderlyings(List> noPriceUnderlyings) { var dc = new List { new Commons.ExcelHelper.DataColumnModel("日期", "Key"), new Commons.ExcelHelper.DataColumnModel("代码", "Value"), }; new Commons.ExcelHelper().ListToExcel>(dc.ToArray(), noPriceUnderlyings, "Sheet1", true, out var buffer); return buffer; } } }