80 lines
4.5 KiB
C#
80 lines
4.5 KiB
C#
using YLErp.DBModels.Consts;
|
|
using YLErp.Model;
|
|
|
|
|
|
namespace YLErp.BLL.GenerateDocument
|
|
{
|
|
public class GeneralBatchGenerateUnwindReport : BatchGenerateDocs
|
|
{
|
|
public GeneralBatchGenerateUnwindReport(List<int> tradeIds, string docType, int optId, string optName, List<int> tradeCashIds) : base(tradeIds, docType, optId, optName, tradeCashIds)
|
|
{
|
|
TradeCashIds = tradeCashIds;
|
|
}
|
|
|
|
protected override string ContractType => ContractTypeEnum.UnWind;
|
|
|
|
protected List<int> TradeCashIds { get; private set; }
|
|
|
|
public override List<trade_contract_group> GetDatas()
|
|
{
|
|
//当前交易日
|
|
var valueDate = valuedateBLL.ValueDate;
|
|
var tradeCashStatus = new List<string>
|
|
{
|
|
ClientCashInCashOut.系统操作_行权费,
|
|
ClientCashInCashOut.系统操作_平仓费
|
|
};
|
|
//获取提前终止交易
|
|
IQueryable<trade_contract_group> 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();
|
|
}
|
|
}
|
|
}
|