Beispiel #1
0
        public void OnTimer(object sender, System.Timers.ElapsedEventArgs args)
        {
            try
            {
                if (!runTimer)
                {
                    DateTime dt_start = DateTime.Now;
                    LogRW.LogInformation(String.Format("Сервис {0} - активен", this.ServiceName), this.eventID);
                    ArrivalMT amt = new ArrivalMT();
                    amt.Transfer();
                    ArrivalKIS akis = new ArrivalKIS();
                    akis.Transfer();
                    SynchronizeKIS skis = new SynchronizeKIS();
                    skis.Synchronize();
                    CopyingInlandKIS cikis = new CopyingInlandKIS();
                    cikis.Copy();

                    TimeSpan ts = DateTime.Now - dt_start;
                    LogRW.LogInformation(String.Format("Сервис {0} - время выполнения: {1} мин {2} сек {3} мсек", this.ServiceName, ts.Minutes, ts.Seconds, ts.Milliseconds), this.eventID);
                }
                else
                {
                    LogRW.LogWarning(String.Format("Сервис {0} - занят", this.ServiceName), this.eventID);
                }
            }
            catch (Exception e)
            {
                LogRW.LogError(String.Format("[RWServiceArrival.OnTimer] : Общая ошибка выполнения сервиса {0} (источник: {1}, № {2}, описание:  {3})", this.ServiceName, e.Source, e.HResult, e.Message), this.eventID);
            }
            finally
            {
                runTimer = false;
                //LogRW.LogInformation(String.Format("Сервис {0} - не активен", this.ServiceName), this.eventID);
            }
        }
Beispiel #2
0
        public int Synchronize()
        {
            if (error_settings)
            {
                LogRW.LogWarning("Выполнение метода SynchronizeKIS.Synchronize() - отменено, ошибка нет данных Settings.", this.eventID);
            }
            if (!this.activeWagons)
            {
                LogRW.LogWarning(String.Format("Синхронизация справочника вагонов classa:{0} - отключена. (Settings:activeSynchronizeWagons).", this.className), this.eventID);
                return(0);
            }
            KIS_Transfer kist = new KIS_Transfer();

            LogRW.LogInformation(String.Format("Сервис синхронизации справочников между системами КИС и RailWay :{0} - запущен", this.className), this.eventID);
            try
            {
                if (activeWagons)
                {
                    int res_swagons = kist.SynchronizeWagons(this.dayControllingWagons);
                }
            }
            catch (Exception e)
            {
                LogRW.LogError(String.Format("[SynchronizeKIS.Synchronize]: Общая ошибка синхронизации справочников между системами КИС и RailWay (источник: {0}, № {1}, описание:  {2})", e.Source, e.HResult, e.Message), this.eventID);
            }
            return(0); // TODO: исправить возврат
        }
Beispiel #3
0
        /// <summary>
        /// Переносим вагоны состава
        /// </summary>
        /// <param name="file"></param>
        /// <param name="id_sostav"></param>
        /// <returns></returns>
        protected int TransferXMLToMTlist(string file, int id_sostav)
        {
            int    count    = 0;
            int    error    = 0;
            int    trans    = 0;
            string trans_id = "";

            try
            {
                XDocument doc = XDocument.Load(file);
                foreach (XElement element in doc.Element("NewDataSet").Elements("Table"))
                {
                    MTList mtl = new MTList()
                    {
                        IDMTList         = 0,
                        IDMTSostav       = id_sostav,
                        Position         = !String.IsNullOrWhiteSpace((string)element.Element("Position")) ? (int)element.Element("Position") : -1,
                        CarriageNumber   = !String.IsNullOrWhiteSpace((string)element.Element("CarriageNumber")) ? (int)element.Element("CarriageNumber") : -1,
                        CountryCode      = !String.IsNullOrWhiteSpace((string)element.Element("CountryCode")) ? (int)element.Element("CountryCode") : -1,
                        Weight           = !String.IsNullOrWhiteSpace((string)element.Element("Weight")) ? (int)element.Element("Weight") : -1,
                        IDCargo          = !String.IsNullOrWhiteSpace((string)element.Element("IDCargo")) ? (int)element.Element("IDCargo") : -1,
                        Cargo            = !String.IsNullOrWhiteSpace((string)element.Element("Cargo")) ? (string)element.Element("Cargo") : "?",
                        IDStation        = !String.IsNullOrWhiteSpace((string)element.Element("IDStation")) ? (int)element.Element("IDStation") : -1,
                        Station          = !String.IsNullOrWhiteSpace((string)element.Element("Station")) ? (string)element.Element("Station") : "?",
                        Consignee        = !String.IsNullOrWhiteSpace((string)element.Element("Consignee")) ? (int)element.Element("Consignee") : -1,
                        Operation        = !String.IsNullOrWhiteSpace((string)element.Element("Operation")) ? (string)element.Element("Operation") : "?",
                        CompositionIndex = !String.IsNullOrWhiteSpace((string)element.Element("CompositionIndex")) ? (string)element.Element("CompositionIndex") : "?",
                        DateOperation    = !String.IsNullOrWhiteSpace((string)element.Element("DateOperation")) ? DateTime.Parse((string)element.Element("DateOperation"), CultureInfo.CreateSpecificCulture("ru-RU")) : DateTime.Now,
                        TrainNumber      = !String.IsNullOrWhiteSpace((string)element.Element("TrainNumber")) ? (int)element.Element("TrainNumber") : -1,
                    };
                    // Переносим вагон
                    int keylist = mtc.SaveMTList(mtl);
                    if (keylist > 0)
                    {
                        trans++;
                    }
                    if (keylist < 1)
                    {
                        error++;
                    }
                    trans_id = trans_id + keylist.ToString() + "; ";
                    count++;
                }
                LogRW.LogInformation(String.Format("В файле {0} определенно: {1} вагонов, перенесено в БД RailWay : {2}, ошибок переноса : {3}, код возврата :{4}", file, count, trans, error, trans_id), this.eventID);
            }
            catch (Exception e)
            {
                LogRW.LogError(String.Format("[MT.TransferXMLToMTlist] :Ошибка переноса вагонов, файл:{0}. Подробно: (Источник:{1}, Код:{2}, Описание:{3})", file, e.Source, e.HResult, e.Message), this.eventID);
                return(-1);
            }
            return(count);
        }
Beispiel #4
0
        public int Copy()
        {
            if (error_settings)
            {
                LogRW.LogWarning("Выполнение метода CopyingInlandKIS.Copy() - отменено, ошибка нет данных Settings.", this.eventID);
                return(0);
            }
            if (!this.activeCopyInput)
            {
                LogRW.LogWarning(String.Format("Копирование по внутреним станциям, вагонов по прибытию, classa:{0} - отключено. (Settings:activeCopyInput).", this.className), this.eventID);
            }
            if (!this.activeCopyOutput)
            {
                LogRW.LogWarning(String.Format("Копирование по внутреним станциям, вагонов по отправке, classa:{0} - отключено. (Settings:activeCopyOutput).", this.className), this.eventID);
            }


            KIS_Transfer kist = new KIS_Transfer();

            LogRW.LogInformation(String.Format("Сервис копирования по внутреним станциям системамы КИС в систему RailWay :{0} - запущен", this.className), this.eventID);
            try
            {
                //TODO: перенести необходимые переменные
                if (activeCopyInput)
                {
                    // Перенесем или обновим информацию о составах защедших на АМКР по системе КИС
                    int result_ci = kist.CopyInputSostavToRailway(this.dayControllingCopyInput_ins);
                    int result_pi = kist.PutInputSostavToStation();
                }
                if (activeCopyOutput)
                {
                    int result_co = kist.CopyOutputSostavToRailway(this.dayControllingCopyOutput_ins);
                    int result_po = kist.PutOutputSostavToStation();
                }
                if (activeDelete)
                {
                    int res_del = kist.ClearArrivingWagons(dayControllingDelete);
                }
            }
            catch (Exception e)
            {
                LogRW.LogError(String.Format("[CopyingInlandKIS.Copy]: Общая ошибка копирования по внутреним станциям системамы КИС в систему RailWay (источник: {0}, № {1}, описание:  {2})", e.Source, e.HResult, e.Message), this.eventID);
            }
            return(0); // TODO: исправить возврат
        }
Beispiel #5
0
        /// <summary>
        /// Перенести вагоны
        /// </summary>
        /// <returns></returns>
        public int Transfer()
        {
            if (!this.active)
            {
                LogRW.LogWarning(String.Format("Сервис переноса данных из КИС :{0} - отключен. (Settings:activeArrivalKIS).", this.className), this.eventID);
                return(0);
            }
            if (error_settings)
            {
                LogRW.LogWarning("Выполнение метода ArrivalKIS.Transfer() - отменено, ошибка нет данных Settings.", this.eventID);
                return(0);
            }
            KIS_Transfer kist = new KIS_Transfer();

            LogRW.LogInformation(String.Format("Сервис переноса данных из КИС в БД RailWay :{0} - запущен, режим копирования: {1}", this.className, this.mode), this.eventID);
            try
            {
                // Перенесем или обновим информацию о составах защедших на АМКР по системе КИС
                int result_cs = kist.CopyArrivalSostavToRailway(this.dayControllingAddNatur);
                int res_pc    = 0;
                switch (this.mode)
                {
                //case 0:
                //    // Полное копирование из КИС
                //    res_pc = kist.PutCarsToStations(0);
                //    break;
                case 1:
                    // Обновление данных скопированных из МТ с переносом из прибытия на станцию
                    res_pc = kist.PutCarsToStations(1);
                    break;

                default:
                    break;
                }
            }
            catch (Exception e)
            {
                LogRW.LogError(String.Format("[ArrivalKIS.Transfer]: Общая ошибка переноса данных из БД КИС (источник: {0}, № {1}, описание:  {2})", e.Source, e.HResult, e.Message), this.eventID);
            }
            return(0); // TODO: исправить возврат
        }
Beispiel #6
0
        /// <summary>
        /// Перенос вагонов
        /// </summary>
        public int Transfer()
        {
            MT mettrans;

            if (error_settings)
            {
                LogRW.LogWarning("Выполнение метода ArrivalMT.Transfer() - отменено, ошибка нет данных Settings.", this.eventID);
                return(0);
            }
            LogRW.LogInformation(String.Format("Сервис переноса вагонов из МТ в БД Railway :{0} - запущен", this.className), this.eventID);
            try
            {
                SFTPClient csftp = new SFTPClient(connect_SFTP);
                csftp.fromPathsHost  = fromPathHost;
                csftp.FileFiltrHost  = FileFiltrHost;
                csftp.toDirPath      = toDirPath;
                csftp.toTMPDirPath   = toTMPDirPath;
                csftp.DeleteFileHost = DeleteFile;
                csftp.RewriteFile    = RewriteFile;
                csftp.CopyToDir();
            }
            catch (Exception e)
            {
                LogRW.LogError(String.Format("[ArrivalMT.Transfer]: Общая ошибка выполнения копирования из SFTP (источник: {0}, № {1}, описание:  {2})", e.Source, e.HResult, e.Message), this.eventID);
            }
            try
            {
                mettrans                     = new MT();
                mettrans.FromPath            = toTMPDirPath;
                mettrans.DeleteFile          = DeleteFile;
                mettrans.DayMonitoringTrains = dayMonitoringTrains;
                return(mettrans.Transfer());
            }
            catch (Exception e)
            {
                LogRW.LogError(String.Format("[ArrivalMT.Transfer]: Общая ошибка переноса xml-файлов в БД Railway (источник: {0}, № {1}, описание:  {2})", e.Source, e.HResult, e.Message), this.eventID);
            }
            return(0);
        }
Beispiel #7
0
        /// <summary>
        /// Перенести xml-файлы из указанной папки в таблицы MT
        /// </summary>
        /// <param name="fromPath"></param>
        /// <param name="delete_file"></param>
        /// <returns></returns>
        public int Transfer(string fromPath, bool delete_file)
        {
            if (!Directory.Exists(fromPath))
            {
                LogRW.LogError(String.Format("[MT.Transfer] :Указанного пути {0} с xml-файлами не существует.", fromPath), this.eventID);
                return(0);
            }
            int countCopy   = 0;
            int countExist  = 0;
            int countError  = 0;
            int countDelete = 0;

            string[] files = Directory.GetFiles(fromPath, "*.xml");
            if (files == null | files.Count() == 0)
            {
                return(0);
            }
            LogRW.LogInformation(String.Format("Определенно {0} xml-файлов для копирования", files.Count()), this.eventID);
            List <FileSostav> list_sostav = GetFileSostav(files);
            var listFileSostavs           = from c in list_sostav.OrderBy(c => c.Date).ThenBy(c => c.Index).ThenBy(c => c.Operation)
                                            select new { c.Index, c.Date, c.Operation, c.File };

            // Пройдемся по списку
            foreach (var fs in listFileSostavs)
            {
                try
                {
                    // защита от записи повторов
                    FileInfo fi         = new FileInfo(fs.File);
                    MTSostav exs_sostav = mtc.Get_MTSostavToFile(fi.Name);
                    if (exs_sostav == null)
                    {
                        int?ParentIDSostav;
                        // получить не закрытый состав
                        //MTSostav no_close_sostav = mtc.Get_NoCloseMTSostav(fs.Index, fs.Date);
                        MTSostav no_close_sostav = mtc.Get_NoCloseMTSostav(fs.Index, fs.Date, this.dayMonitoringTrains); // Включил режим ограничения по времени dayMonitoringTrains
                        ParentIDSostav = null;
                        if (no_close_sostav != null)
                        {
                            //// TODO: !УБРАЛ дополнительная проверка совпадение по поездам и включил режим ограничения по времени dayMonitoringTrains(разные поезда двигают один состав) дополнительная проверка совпадение по поездам
                            //int? TrainNumber = mtc.GetTrainNumberToSostav(no_close_sostav.IDMTSostav);
                            //int TrainNumber_xml = GetTrainNumberToXml(fs.File);
                            //if (TrainNumber == TrainNumber_xml)
                            {
                                ParentIDSostav = no_close_sostav.IDMTSostav;
                                // Закрыть состав
                                no_close_sostav.Close = DateTime.Now;
                                mtc.SaveMTSostav(no_close_sostav);
                            }
                        }
                        MTSostav new_sostav = new MTSostav()
                        {
                            FileName         = fi.Name,
                            CompositionIndex = fs.Index,
                            DateTime         = fs.Date,
                            Operation        = fs.Operation,
                            Create           = DateTime.Now,
                            Close            = null,
                            ParentID         = ParentIDSostav
                        };

                        int new_id = mtc.SaveMTSostav(new_sostav);
                        if (delete_file & SaveWagons(new_id, fs.File, ref countCopy, ref countError))
                        {
                            File.Delete(fs.File);
                            countDelete++;
                        }
                    }
                    else
                    {
                        if (!mtc.IsMTListToMTSostsv(exs_sostav.IDMTSostav))
                        {
                            if (delete_file & SaveWagons(exs_sostav.IDMTSostav, fs.File, ref countCopy, ref countError))
                            {
                                File.Delete(fs.File);
                                countDelete++;
                            }
                        }
                        else
                        {
                            // Файл перенесен ранеее, удалим его если это требуется
                            if (delete_file)
                            {
                                string file = fs.File;
                                File.Delete(file);
                                countDelete++;
                            }
                        }
                        countExist++;
                    }
                }
                catch (Exception e)
                {
                    LogRW.LogError(String.Format("[MT.Transfer] :Ошибка переноса xml-файла в БД Railway, файл {0}. Подробно: (Источник:{1}, Код:{2}, Описание:{3})", fs.File, e.Source, e.HResult, e.Message), this.eventID);
                    countError++;
                }
            }
            LogRW.LogInformation(String.Format("Перенос xml-файлов в БД RailWay завершен, определено для переноса {0} xml-файлов, перенесено {1}, были перенесены ранее {2}, ошибки при переносе {3}, удаленно {4}.", files.Count(), countCopy, countExist, countError, countDelete), this.eventID);
            return(files.Count());
        }