108 lines
4.0 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|