using YLErp.DBModels.Consts; using YLErp.Model; namespace YLErp.BLL.GenerateDocument { public class GeneralBatchGenerateUnwindReport : BatchGenerateDocs { public GeneralBatchGenerateUnwindReport(List tradeIds, string docType, int optId, string optName, List tradeCashIds) : base(tradeIds, docType, optId, optName, tradeCashIds) { TradeCashIds = tradeCashIds; } protected override string ContractType => ContractTypeEnum.UnWind; protected List TradeCashIds { get; private set; } public override List GetDatas() { //当前交易日 var valueDate = valuedateBLL.ValueDate; var tradeCashStatus = new List { ClientCashInCashOut.系统操作_行权费, ClientCashInCashOut.系统操作_平仓费 }; //获取提前终止交易 IQueryable query = null; if (PS.Config.TradeElement.IsSingleExecutionTemplate) { query = from trade in db.trade join tcd in (from contractDoc in db.trade_contract_document join tcr in db.trade_contract_r on contractDoc.Code equals tcr.ContractCode where contractDoc.Type == ContractTypeEnum.Trade && tcr.Type == contractDoc.Type && tcr.IsValid select new { contractDoc, tcr.TradeId }) on trade.id equals tcd.TradeId into contractDocs from tcd in contractDocs.DefaultIfEmpty() join tc in (from tradeCash in db.trade_cash where tradeCash.ValidState != ConsGlobal.InValid && !tradeCash.IsDeleted && tradeCashStatus.Contains(tradeCash.Action) && tradeCash.ExerciseWay == TradeCashExerciseWayEnum.提前终止行权 && TradeCashIds.Contains(tradeCash.id) select tradeCash) on trade.id equals tc.TradeId into tCash from tc in tCash.DefaultIfEmpty() where (trade.TradeStatus == ConsTrade.已平仓 || trade.UnWindNotional > 0) && trade.ValidState != "InValid" && trade.UnWindDate <= valueDate && trade.ClientId != 0 && TradeIdList.Contains(trade.id) select new trade_contract_group { trade = trade, trade_cash = tc, trade_contract_document = tcd.contractDoc, }; } else { query = from trade in db.trade join tcd in (from contractDoc in db.trade_contract_document join tcr in db.trade_contract_r on contractDoc.Code equals tcr.ContractCode where contractDoc.Type == ContractTypeEnum.Trade && contractDoc.Type == tcr.Type && tcr.IsValid select new { contractDoc, tcr.TradeId }) on trade.id equals tcd.TradeId into contractDocs from tcd in contractDocs.DefaultIfEmpty() join tc in (from tradeCash in db.trade_cash where tradeCash.ValidState != ConsGlobal.InValid && !tradeCash.IsDeleted && tradeCashStatus.Contains(tradeCash.Action) && tradeCash.ExerciseWay == TradeCashExerciseWayEnum.提前终止行权 && TradeCashIds.Contains(tradeCash.id) select tradeCash) on trade.id equals tc.TradeId into tCash from tc in tCash.DefaultIfEmpty() where (trade.TradeStatus == ConsTrade.已平仓 || trade.UnWindNotional > 0 || (trade.TradeStatus == ConsTrade.已执行 && trade.ExerciseMode == "American")) && trade.ValidState != "InValid" && trade.UnWindDate <= valueDate && trade.ClientId != 0 && TradeIdList.Contains(trade.id) select new trade_contract_group { trade = trade, trade_cash = tc, trade_contract_document = tcd.contractDoc, }; } return query.ToList(); } } }