65 lines
3.1 KiB
C#
65 lines
3.1 KiB
C#
using YLErp.Modules.DataProviderModule;
|
|
|
|
namespace YLErp.Modules.EodModule.SettlementModule
|
|
{
|
|
public class EodCheckPriceService : YLBaseService
|
|
{
|
|
public EodCheckPriceService(OptUserInfo userInfo) : base(userInfo)
|
|
{
|
|
|
|
}
|
|
|
|
public List<string> GetNoPriceUnderlyings(DateTime date)
|
|
{
|
|
if (date.DayOfWeek == DayOfWeek.Saturday || date.DayOfWeek == DayOfWeek.Sunday)
|
|
{
|
|
return null;
|
|
}
|
|
var positionStatus = ConsTrade.PositionTradeStatusList;
|
|
var PreSettleDate = BLL.valuedateBLL.GetNonHolidayDefore(date.AddDays(-1));
|
|
var predicate = PredicateBuilder.Create<trade>(t => t.ClientId > 0
|
|
&& t.ExerciseDate >= date && t.TradeDate <= date
|
|
&& (t.TradeType != "结构化交易" && t.IsGroup != 1 || t.IsGroup == 1 && t.TradeType == "结构化交易") && (t.IsGroup != 2 || t.IsGroup == 2 && t.TradeType == "收益互换")
|
|
&& t.ValidState != "InValid");
|
|
var query = (from t in DbContext.trade.Where(predicate) select new { t.id, t.UnderlyingCode, t.TradeStatus }).ToArray();
|
|
var needCashesTradeId = query.Where(o => !positionStatus.Contains(o.TradeStatus)).Select(o => o.id).ToArray();
|
|
var tradeCashes = DbContext.trade_cash.Where(o => needCashesTradeId.Contains(o.TradeId) && o.ValueDate < date && o.ValidState != "InValid" && o.UnwindType == "全部平仓");
|
|
var settledTradeIds = tradeCashes.Select(o => o.TradeId);
|
|
query = query.Where(t => !settledTradeIds.Contains(t.id)).ToArray();
|
|
var exStatus = new ExchangeStatus(date, PreSettleDate);
|
|
var eodPriceProvider = new EodPriceProvider(date, isDiviendPrice: false).Initialize();
|
|
var codeArr = query.Select(o => o.UnderlyingCode).Where(n => !string.IsNullOrEmpty(n)).Distinct().ToArray();
|
|
var umCodes = codeArr.Where(n => !eodPriceProvider.HasValue(n)).ToList();
|
|
var hoildayCodes = new List<string>();
|
|
foreach (var n in umCodes)
|
|
{
|
|
var un = DataCacheProvider.GetUnderlyingDataSource().GetData(n);
|
|
if (exStatus.IsHoliday(un.MarketCode))
|
|
{
|
|
hoildayCodes.Add(n);
|
|
}
|
|
}
|
|
if (hoildayCodes != null && hoildayCodes.Count > 0)
|
|
{
|
|
foreach (var item in hoildayCodes)
|
|
{
|
|
umCodes.Remove(item);
|
|
}
|
|
}
|
|
return umCodes;
|
|
}
|
|
|
|
public Byte[] exportNoPriceUnderlyings(List<KeyValuePair<string, string>> noPriceUnderlyings)
|
|
{
|
|
var dc = new List<Commons.ExcelHelper.DataColumnModel>
|
|
{
|
|
new Commons.ExcelHelper.DataColumnModel("日期", "Key"),
|
|
new Commons.ExcelHelper.DataColumnModel("代码", "Value"),
|
|
|
|
};
|
|
new Commons.ExcelHelper().ListToExcel<KeyValuePair<string, string>>(dc.ToArray(), noPriceUnderlyings, "Sheet1", true, out var buffer);
|
|
return buffer;
|
|
}
|
|
}
|
|
}
|