Files
zszq-trs/YLErpDAL/BLL/GenerateDocument/GeneralBatchGenerateUnwindReport.cs
T
2024-05-09 14:06:26 +08:00

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();
}
}
}