Files
zszq-trs/Tools/YLTestTool/Modules/TradeRiskCalcModule/TradeDataSource.cs
T
2024-05-09 14:06:26 +08:00

108 lines
4.0 KiB
C#

using Microsoft.EntityFrameworkCore;
using YLErp.Commons;
using YLErp.DBModels;
namespace YLErp.Modules.TradeRiskCalcModule
{
class TradeDataSource : TestServiceBase, ITradeDataSource
{
readonly DateTime _valueDate;
readonly TradeRiskCalcTestRequest2 _request;
public TradeDataSource(DateTime valueDate, TradeRiskCalcTestRequest2 request)
{
_valueDate = valueDate;
_request = request ?? throw new ArgumentNullException(nameof(request));
}
public TraceWrap Trace { get; set; }
public IEnumerable<ExchangeTrade> GetExchangeTrades()
{
if (!_request.IncludeExchange || _request.TradeId > 0 || _request.ClientId > 0)
{
return Enumerable.Empty<ExchangeTrade>();
}
var lastSettleDate = BLL.Eod.EodOperationBase.GetLastSettlementDate(_valueDate, true);
var predicate = PredicateBuilder.Create<ExchangeTrade>(trad =>
trad.TradeDate > lastSettleDate && trad.TradeDate <= _valueDate
&& (trad.MaturityDate >= _valueDate || trad.MaturityDate == null)
&& trad.IsValid);
if (_request.UnderlyingCodes != null && _request.UnderlyingCodes.Any())
{
predicate = predicate.And(n => _request.UnderlyingCodes.Contains(n.UnderlyingCode));
}
if (!string.IsNullOrEmpty(_request.TradeType))
{
predicate = predicate.And(n => _request.TradeType == n.TradeType);
}
if (_request.AssetBookId > 0)
{
predicate = predicate.And(n => n.AssetBookId == _request.AssetBookId);
}
var db = DbContextFactory.GetYLDbContext();
//构建Linq查询语句
var hedgeTradeQuery = db.ExchangeTrade.AsNoTracking().Where(predicate);
//从数据库中获取数据
return hedgeTradeQuery.ToArray();
}
public IEnumerable<trade> GetOtcTrades()
{
var valueDate = _valueDate;
var startDate = _valueDate.AddYears(-1);
var predicate = PredicateBuilder.Create<trade>(n =>
n.ClientId > 0
&& n.TradeDate > startDate
&& n.TradeType != "结构化交易"
&& n.ValidState != "InValid"
&& n.TradeStatus != ConsTrade.已拒绝);
if (_request.TradeId > 0)
{
predicate = predicate.And(n => n.id == _request.TradeId);
}
else
{
predicate = predicate.And(n => (!ConsTrade.TradeCompleteStatus.Contains(n.TradeStatus) || n.TradeDate == valueDate || n.UnWindDate == valueDate)
&& (n.ExerciseDate == null || n.ExerciseDate >= valueDate));
if (_request.ClientId > 0)
{
predicate = predicate.And(n => n.ClientId == _request.ClientId);
}
if (_request.UnderlyingCodes != null && _request.UnderlyingCodes.Any())
{
predicate = predicate.And(n => _request.UnderlyingCodes.Contains(n.UnderlyingCode));
}
if (!string.IsNullOrEmpty(_request.TradeType))
{
predicate = predicate.And(n => _request.TradeType == n.TradeType);
}
if (_request.AssetBookId > 0)
{
predicate = predicate.And(n => n.AssetId == _request.AssetBookId);
}
}
var datas = DbContext.trade.AsNoTracking().Where(predicate).ToArray();
Trace?.WriteLine($"(实时风险)获取到场外交易数据${datas.Length}条");
Trace?.WriteData(datas, "(实时风险)场外交易数据");
return datas;
}
}
}