/// <summary> /// 计算指定日主力合约。 /// </summary> /// <param name="settlementDate"></param> /// <returns></returns> private bool CalculateSerialContract(SettlementDayType settlementDayType, DateTime settlementDate, List <ErrorVarieties> errorList) { string text = string.Empty; if (!m_tradingDateManager.IsTradingDate(settlementDate)) { text = string.Format("{0:yyyy-MM-dd}为非交易日,无需计算", settlementDate); USeConsole.WriteLine(text); return(true); } Debug.Assert(m_varietiesList != null && m_varietiesList.Count > 0); foreach (USeProduct varieties in m_varietiesList) { try { List <string> serialContractList = null; if (settlementDayType == SettlementDayType.Today) { serialContractList = GetTodaySerialInstrument(varieties, settlementDate); } else { Debug.Assert(settlementDayType == SettlementDayType.SpecialDay); serialContractList = GetHistorySerialInstrument(varieties, settlementDate); //连续合约 } SaveSerialContract(varieties, settlementDate, serialContractList); text = string.Format("{0}@{1:yyyy-MM-dd}连续合约计算完成,共{2}个合约", varieties.ProductCode, settlementDate, serialContractList.Count); m_logger.WriteInformation(text); USeConsole.WriteLine(text); } catch (Exception ex) { text = string.Format("{0}@{1:yyyy-MM-dd}连续合约计算失败,{2}", varieties.ProductCode, settlementDate, ex.Message); m_logger.WriteInformation(text); USeConsole.WriteLine(text); errorList.Add(new ErrorVarieties() { Varieties = varieties.ProductCode, SettlementDate = settlementDate, ErrorMessage = ex.Message }); } } return(true); }
/// <summary> /// 计算指定时段连续合约。 /// </summary> /// <param name="beginDate">起始日。</param> /// <param name="endDate">结束日。</param> /// <returns></returns> private bool CalculateSerialContract(SettlementDayType settlementDayType, DateTime beginDate, DateTime endDate, List <ErrorVarieties> errorList) { string text = string.Empty; DateTime settlementDate = beginDate; while (settlementDate <= endDate) { try { CalculateSerialContract(settlementDayType, settlementDate, errorList); } catch (Exception ex) { text = string.Format("{0:yyyy-MM-dd}计算失败,错误:{1}", settlementDate, ex.Message); m_logger.WriteError(text); USeConsole.WriteLine(text); } settlementDate = settlementDate.AddDays(1); } return(true); }
/// <summary> /// 读取配置。 /// </summary> private void ReadConfig() { string text = string.Empty; m_dbConnStr = ConfigurationManager.ConnectionStrings["AlphaDB"].ConnectionString; if (string.IsNullOrEmpty(m_dbConnStr)) { text = "AlphaDB数据库连接串为空"; } m_alpahDBName = ConfigurationManager.AppSettings["AlphaDBName"]; if (string.IsNullOrEmpty(m_alpahDBName)) { text = "AlphaDBName为空"; throw new ApplicationException(text); } try { MainContractCalculateSection section = (ConfigurationManager.GetSection("MainContractCalculater") as MainContractCalculateSection); if (section == null) { text = "未找到MainContractCalculater配置节点"; throw new ApplicationException(text); } if (section.CalculateDate.CalculateDayType == SettlementDayType.SpecialDay) { if (section.CalculateDate.BeginDay.HasValue == false) { text = "未设定beginDate节点值"; throw new ApplicationException(text); } if (section.CalculateDate.EndDay.HasValue == false) { text = "未设定endDate节点值"; throw new ApplicationException(text); } if (section.CalculateDate.EndDay < section.CalculateDate.BeginDay) { text = "beginDate节点值大于endDate"; throw new ApplicationException(text); } m_dayType = SettlementDayType.SpecialDay; m_beginDate = section.CalculateDate.BeginDay.Value.Date; m_endDate = section.CalculateDate.EndDay.Value.Date; } else { Debug.Assert(section.CalculateDate.CalculateDayType == SettlementDayType.Today); m_dayType = SettlementDayType.Today; m_beginDate = DateTime.Today; m_endDate = DateTime.Today; } if (section.QuerySetting.Interval <= TimeSpan.Zero) { text = "轮询间隔不能为空"; throw new Exception(text); } if (section.QuerySetting.Count <= 0) { text = "重试次数不能小于0"; throw new Exception(text); } m_tryInterval = section.QuerySetting.Interval; m_tryCount = section.QuerySetting.Count; } catch (ApplicationException ex) { throw ex; } }