/// <summary>
        /// 指定日期是否为节假日。
        /// </summary>
        /// <param name="config"></param>
        /// <param name="date">指定日期。</param>
        /// <returns></returns>
        private bool IsHoliday(TradingDaySection config, DateTime date)
        {
            if (config.Holidays != null && config.Holidays.Count > 0)
            {
                foreach (HolidayItemElement element in config.Holidays)
                {
                    if (date >= element.BeginDay.Date && date <= element.EndDay.Date)
                    {
                        return(true);
                    }
                }
            }

            return(false);
        }
        /// <summary>
        /// 运行。
        /// </summary>
        public int Start()
        {
            try
            {
                m_serverLogger = AppLogger.InitInstance();
            }
            catch (Exception ex)
            {
                throw new ApplicationException("Initialize applogger failed," + ex.Message);
            }

            m_serverLogger.LineFeed();

            string            message = string.Empty;
            TradingDaySection config  = ConfigurationManager.GetSection("TradingDayManager") as TradingDaySection;

            if (config == null)
            {
                message = "Not found [TradingDayManager] config.";
                WriteConsoleLog(message);
                m_serverLogger.WriteError(message);
                return(-1);
            }

            try
            {
                m_dbConn = ConfigurationManager.ConnectionStrings["KLineDB"].ConnectionString;
                if (string.IsNullOrEmpty(m_dbConn))
                {
                    throw new ApplicationException("KLineDB connection string is null");
                }
            }
            catch (Exception ex)
            {
                message = "Read db connection string failed," + ex.Message;
                WriteConsoleLog(message);
                m_serverLogger.WriteError(message);
                return(-1);
            }


            message = "Begin process trading day.";
            WriteConsoleLog(message);
            m_serverLogger.WriteInformation(message);


            DateTime startDate;
            DateTime endDate;

            startDate = config.BeginDay;
            endDate   = config.EndDay;

            List <string> commands = new List <string>();
            DateTime      currDate = startDate;

            List <TradeCalendar> calendarList = new List <TradeCalendar>();

            while (currDate <= endDate)
            {
                bool isTradingDay = false;
                switch (currDate.DayOfWeek)
                {
                case DayOfWeek.Monday:
                case DayOfWeek.Tuesday:
                case DayOfWeek.Wednesday:
                case DayOfWeek.Thursday:
                case DayOfWeek.Friday:
                    isTradingDay = !IsHoliday(config, currDate);
                    break;

                default:
                    isTradingDay = false;
                    break;
                }

                TradeCalendar calendar = new TradeCalendar()
                {
                    Today        = currDate,
                    IsTradeDay   = isTradingDay,
                    PreTradeDay  = DateTime.MinValue,
                    NextTradeDay = DateTime.MinValue
                };

                calendarList.Add(calendar);

                currDate = currDate.AddDays(1);
            }


            for (int i = 0; i < calendarList.Count; i++)
            {
                TradeCalendar calendar = calendarList[i];
                //补前一交易日
                for (int j = i - 1; j >= 0; j--)
                {
                    if (calendarList[j].IsTradeDay)
                    {
                        calendar.PreTradeDay = calendarList[j].Today;
                        break;
                    }
                }
                if (calendar.PreTradeDay == DateTime.MinValue)
                {
                    calendar.PreTradeDay = config.BeginDayPreTradeDay;
                }
                //补下一交易日
                for (int j = i + 1; j < calendarList.Count; j++)
                {
                    if (calendarList[j].IsTradeDay)
                    {
                        calendar.NextTradeDay = calendarList[j].Today;
                        break;
                    }
                }
                if (calendar.NextTradeDay == DateTime.MinValue)
                {
                    calendar.NextTradeDay = config.EndDayNextTradeDay;
                }
            }

            try
            {
                SaveToMySqlDB(calendarList, config.BeginDay, config.EndDay);
            }
            catch (Exception ex)
            {
                message = string.Format("Save data to db failed,Error:{0}.", ex.Message);
                WriteConsoleLog(message);
                m_serverLogger.WriteError(message);
                return(-2);
            }

            message = "End process trading day.";
            WriteConsoleLog(message);
            m_serverLogger.WriteInformation(message);
            return(0);
        }