Files
zszq-trs/YLErpDAL/Modules/EodModule/SettlementModule/EodCheckReferencePrice.cs
T

83 lines
2.7 KiB
C#

using YLErp.Modules.DataProviderModule;
namespace YLErp.Modules.EodModule.SettlementModule
{
/// <summary>
/// 检查当日参考价,是否全部进系统。
/// </summary>
class EodCheckReferencePrice : EodSettleServiceBaseV2
{
public const string Step = "检查标的参考价格缺失";
public EodCheckReferencePrice(EodSettlementContextV2 context) : base(context)
{
}
/// <summary>
/// 检查参考价
/// </summary>
public void Execute()
{
if (!_context.OtcTrades.Any())
{
return;
}
var request = _context.Request;
var settleDate = _context.SettleDate;
var clienIds = _context.Request.ClientIds;
IQueryable<string> allQuery = null;
var eodPriceProvider = _context.GetEodPriceProvider();
//判断当日结算价是否已经入库
if (!EodPriceQueryService.CheckDbExists(_context.SettleDate))
{
_context.RaiseError(Step, "结算价格未入库");
}
//检查是否所有待结算交易标的价格都存在
//获取所有现存(抵押状态)抵押品信息 增加抵押品价格检查
if (request.IsSettleOtcTrades)
{
var tradePredicate = _context.PredicateBuilder.GetOtcTradePredicate()
.And(t => t.TradeType != "自定义交易" && t.SettlementType == SettlementTypeEnum.ReferencePrice && t.UnderlyingCode != null);
#region 新增客户筛选 tw
if (clienIds != null)
{
tradePredicate = tradePredicate.And(l => clienIds.Contains(l.ClientId));
}
#endregion
allQuery = DbContext.trade.Where(tradePredicate).Select(n => n.UnderlyingCode).Distinct();
}
if (allQuery == null)
{
return;
}
string[] umCodeArr = allQuery.ToArray();
var umCodes = umCodeArr.Where(n => !string.IsNullOrEmpty(n) && eodPriceProvider.GetPrice(n, SettlementTypeEnum.ReferencePrice) == 0).ToHashSet(StringComparer.OrdinalIgnoreCase);
//排除掉节假日不需要结算的交易
foreach (var t in _context.HolidayTrades)
{
if (!string.IsNullOrEmpty(t.UnderlyingCode))
{
umCodes.Remove(t.UnderlyingCode);
}
}
if (umCodes.Any())
{
var codes = string.Join(",", umCodes);
_context.RaiseError(Step, "标的代码:" + codes);
}
}
}
}