예제 #1
0
            /// <summary>
            /// Конструктор - основной(без аргументов)
            /// </summary>
            public MSExcelIOExportPBRValues()
                : base()
            {
                _date = DateTime.MinValue;

                _dictValues = new Dictionary <int, IVALUES> ();

                _mnlResetEventBusy = new ManualResetEvent(false);
                _timerWiat         = new System.Threading.Timer(fTimerWait, null, System.Threading.Timeout.Infinite, System.Threading.Timeout.Infinite);
                _timerShedule      = new System.Threading.Timer(fTimerShedule, null, System.Threading.Timeout.Infinite, System.Threading.Timeout.Infinite);

                _prevArg = new EventResultArgs()
                {
                    Result = RESULT.OK
                };

                Mode = AdminTS_KomDisp.ModeDefaultExportPBRValues;
            }
예제 #2
0
            /// <summary>
            /// Выполнить операцию размещения значений в книге MS Excel
            ///  , и в автоматическом режиме сохранить ее
            /// </summary>
            private void run(object obj)
            {
                List <FileInfo> listFileInfoDest;
                EventResultArgs arg;
                string          pattern   = string.Empty;
                int             iTemplate = 0 // признак продолжения выполнения операции - наличие шаблона
                , err = 0;                    // по умолчанию ошибок нет

                try {
#if HCLASSLIBRARY_MSEXCELIO
                    if (IsReOpen == true)
                    {
                        ReCreate();
                    }
                    else
                    {
                        ;
                    }
#else
#endif
                    // получить шаблон поиска документа
                    pattern = string.Format("*{0}*.{1}", ConstantExportPBRValues.MaskDocument, ConstantExportPBRValues.MaskExtension);

                    Logging.Logg().Action(string.Format("AdminTS_KomDisp.MSExcelIOExportPBRValues::Run () - поиск документа: каталог=<{0}>, шаблон=<{1}>...", Folder_CSV, pattern)
                                          , Logging.INDEX_MESSAGE.NOT_SET);

                    listFileInfoDest = new List <FileInfo> (Directory.GetFiles(Folder_CSV, pattern, SearchOption.TopDirectoryOnly).ToList()
                                                            .ConvertAll <FileInfo> (name => new FileInfo(string.Format(@"{0}", name))));

                    if (listFileInfoDest.Count > 1)
                    {
                        // выполнить сортировку, затем открыть "самый новый" файл
                        listFileInfoDest.Sort((fileInfo1, fileInfo2) => {
                            return((int)(fileInfo1.LastWriteTime - fileInfo2.LastWriteTime).TotalSeconds < 0 ? 1
                                : (int)(fileInfo1.LastWriteTime - fileInfo2.LastWriteTime).TotalSeconds > 0 ? -1
                                    : 0);
                        });
                    }
                    else if (listFileInfoDest.Count > 0)
                    {
                        // файл единственный(вероятно, шаблон) - открыть
                        iTemplate = 1;
                    }
                    else
                    {
                        // файл отсутствует - открыть шаблон
                        iTemplate = -1;
                    }

                    if (!(iTemplate < 0))
                    {
#if HCLASSLIBRARY_MSEXCELIO
                        if (IsOpen(Path.GetFileName(listFileInfoDest [0].FullName), out err) == true)
                        {
                            Logging.Logg().Error(string.Format("AdminTS_KomDisp.MSExcelIOExportPBRValues::Run () - книга с наименованием={0}\\{1} открыта..."
                                                               , Folder_CSV, TemplateDocument)
                                                 , Logging.INDEX_MESSAGE.NOT_SET);

                            if (Mode == MODE_EXPORT_PBRVALUES.AUTO)
                            {
                                Visible = !CloseExcelDoc(Path.GetFileName(listFileInfoDest [0].FullName));
                            }
                            else if (Mode == MODE_EXPORT_PBRVALUES.MANUAL)
                            {
                                Visible = true;
                            }
                            else
                            {
                                ;
                            }
#else
#endif
#if HCLASSLIBRARY_MSEXCELIO
                        }
                        else
                        {
                            if (Visible == true)
                            {
                                Visible = false;
                            }
                            else
                            {
                                ;
                            }
                        }

                        if (Visible == false)
#else
#endif
                        { if (openDocument(listFileInfoDest [0].FullName) == 0)
                          {
                              Logging.Logg().Debug(string.Format("AdminTS_KomDisp.MSExcelIOExportPBRValues::Run () - открыли документ {0}...", listFileInfoDest [0].FullName)
                                                   , Logging.INDEX_MESSAGE.NOT_SET);

                              #region Заполнить лист книги MS Excel значениями
                              selectWorksheet(1);

                              if (writeValue(ConstantExportPBRValues.NumberColumn_Date, ConstantExportPBRValues.NumberRow_Date, HDateTime.ToMoscowTimeZone().ToString(ConstantExportPBRValues.Format_Date)) == false)
                              {
                                  Logging.Logg().Error(string.Format("AdminTS_KomDisp.MSExcelIOExportPBRValues::Run () - не удалось сохранить дату/время обновления...")
                                                       , Logging.INDEX_MESSAGE.NOT_SET);
                              }
                              else
                              {
                                  Logging.Logg().Action(string.Format("AdminTS_KomDisp.MSExcelIOExportPBRValues::Run () - сохранили дату/время обновления [столб.={0}, стр.={1}, знач.={2}]..."
                                                                      , ConstantExportPBRValues.NumberColumn_Date, ConstantExportPBRValues.NumberRow_Date, HDateTime.ToMoscowTimeZone().ToString(ConstantExportPBRValues.Format_Date))
                                                        , Logging.INDEX_MESSAGE.NOT_SET);
                              }

                              foreach (KeyValuePair <int, IVALUES> pair in _dictValues)
                              {
                                  for (int iHour = 0; iHour < pair.Value.m_data.Length; iHour++)
                                  {
                                      if (writeValue(pair.Value.m_indxColumn, ConstantExportPBRValues.NumberRow_0 + iHour, pair.Value.m_data [iHour].pbr) == false)
                                      {
                                          Logging.Logg().Error(string.Format("AdminTS_KomDisp.MSExcelIOExportPBRValues::Run () - [компонент_ID={0}, час={1}] не удалось сохранить значение {2}"
                                                                             , pair.Key, iHour + 1, pair.Value.m_data [iHour].pbr)
                                                               , Logging.INDEX_MESSAGE.NOT_SET);
                                      }
                                      else
                                      {
                                          ;
                                      }
                                  }
                              }
                              #endregion

                              _previousNameDocument = NameDocument;
                              save(_previousNameDocument);

                              Logging.Logg().Action(string.Format("AdminTS_KomDisp.MSExcelIOExportPBRValues::Run () - сохранили документ {0} с наименованием {1}...", listFileInfoDest [0].FullName, _previousNameDocument)
                                                    , Logging.INDEX_MESSAGE.NOT_SET);

                              try {
                                  listFileInfoDest.ForEach(fi => {
                                        if ((_previousNameDocument.Equals(fi.FullName) == false) &&
                                            (TemplateDocument.Equals(fi.FullName) == false))
                                        {
                                            fi.Delete();
                                        }
                                        else
                                        {
                                            ;
                                        }
                                    });
                              } catch (Exception e) {
                                  Logging.Logg().Error(string.Format("AdminTS_KomDisp.MSExcelIOExportPBRValues::Run () - ошибка удаления '{0}', причина={1}..."
                                                                     , listFileInfoDest [0].FullName, e.Message)
                                                       , Logging.INDEX_MESSAGE.NOT_SET);
                              }

                              if (Mode == MODE_EXPORT_PBRVALUES.AUTO)
                              {
#if HCLASSLIBRARY_MSEXCELIO
                                  CloseExcelDoc();
#else
#endif
                                  arg = new EventResultArgs()
                                  {
                                      Result = RESULT.OK
                                  };
                              }
                              else
                              {
                                  arg = new EventResultArgs()
                                  {
                                      Result = RESULT.VISIBLE
                                  };
                              }
                          }
                          else
                          {
                              Logging.Logg().Error(string.Format("AdminTS_KomDisp.MSExcelIOExportPBRValues::Run () - не удалось открыть книгу MS Excel с наименованием={0}..."
                                                                 , listFileInfoDest [0].FullName)
                                                   , Logging.INDEX_MESSAGE.NOT_SET);

                              arg = new EventResultArgs()
                              {
                                  Result = RESULT.ERROR_OPEN
                              };
                          } }
#if HCLASSLIBRARY_MSEXCELIO
                        else
                        {
                            // Видимость 'true' - ожидать действий пользователя
                            arg = new EventResultArgs()
                            {
                                Result = RESULT.ERROR_RETRY
                            }
                        };
#else
#endif
                    }
                    else
                    {
                        Logging.Logg().Error(string.Format("AdminTS_KomDisp.MSExcelIOExportPBRValues::Run () - отсутствует шаблон с наименованием={0}\\{1}..."
                                                           , Folder_CSV, TemplateDocument)
                                             , Logging.INDEX_MESSAGE.NOT_SET);

                        arg = new EventResultArgs()
                        {
                            Result = RESULT.ERROR_TEMPLATE
                        };
                    }
                } catch (Exception e) {
                    Logging.Logg().Exception(e, string.Format("AdminTS_KomDisp.MSExcelIOExportPBRValues::Run () - ..."), Logging.INDEX_MESSAGE.NOT_SET);

                    arg = new EventResultArgs()
                    {
                        Result = RESULT.ERROR_APP
                    };
                }

                // остановить таймер ожидания завершения длительной операции
                stop_TimerWait();

                clearContext();

                _mnlResetEventBusy.Reset();

                // при внештатном завершении потока - продолжить логгирование и работу приложения в целом
                try { Logging.Logg().Debug(string.Format("AdminTS_KomDisp.MSExcelIOExportPBRValues::Run() - завершение потока..."), Logging.INDEX_MESSAGE.NOT_SET); } catch  { }

                Result(this, _prevArg = arg);
            }