Files
zszq-trs/YLErpDAL/Modules/EodModule/SettlementModule/EodCheckPriceService.cs
T
2024-05-09 14:06:26 +08:00

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