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); } }
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: исправить возврат }
/// <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); }
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: исправить возврат }
/// <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: исправить возврат }
/// <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); }
/// <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()); }