/// <summary> /// удалить строку состава отсутсвующего после переноса /// </summary> /// <param name="list"></param> /// <returns></returns> protected int DeleteOutputSostav(List <Oracle_OutputSostav> list) { if (list == null | list.Count == 0) { return(0); } int delete = 0; int errors = 0; foreach (Oracle_OutputSostav or_os in list) { // Удалим вагоны из системы RailCars transfer_rc.DeleteVagonsToDocOutput(or_os.DocNum); // TODO: Сделать код удаления вагонов из RailWay or_os.Close = DateTime.Now; or_os.Status = (int)statusSting.Delete; int res = oos.SaveOracle_OutputSostav(or_os); if (res > 0) { delete++; } if (res < 1) { LogRW.LogError(String.Format("[KISTransfer.DeleteOutputSostav] :Ошибка удаления данных из таблицы учета прибытия составов (копирование по отправке из внутрених станций), ID: {0}", or_os.ID), this.eventID); errors++; } } LogRW.LogWarning(String.Format("Определено для удаленния прибывших составов (копирование по отправке из внутрених станций) {0}, удалено {1}, ошибок удаления {2}", list.Count(), delete, errors), this.eventID); return(delete); }
/// <summary> /// Добавить новые составы появившиеся после переноса /// </summary> /// <param name="list"></param> protected int InsertOutputSostav(List <NumVagStpr1OutStDoc> list) { if (list == null | list.Count == 0) { return(0); } int insers = 0; int errors = 0; foreach (NumVagStpr1OutStDoc out_s in list) { int res = SaveOutputSostav(out_s, statusSting.Insert); if (res > 0) { insers++; } if (res < 1) { LogRW.LogError(String.Format("[KISTransfer.InsertOutputSostav] :Ошибка добавления данных в таблицу учета прибытия составов (копирование по отправке из внутрених станций), номер документа: {0}", out_s.ID_DOC), this.eventID); errors++; } } LogRW.LogWarning(String.Format("Определено для добавленных новых составов (копирование по отправке из внутрених станций) {0}, добавлено {1}, ошибок добавления {2}", list.Count(), insers, errors), this.eventID); return(insers); }
/// <summary> /// Удалить ранее перенесеные составы /// </summary> /// <param name="list"></param> /// <returns></returns> protected int DeleteArrivalSostav(List <Oracle_ArrivalSostav> list) { if (list == null | list.Count == 0) { return(0); } int delete = 0; int errors = 0; foreach (Oracle_ArrivalSostav or_as in list) { // Удалим вагоны из системы RailCars transfer_rc.DeleteVagonsToNaturList(or_as.NaturNum, or_as.DateTime); // TODO: Сделать код удаления вагонов из RailWay or_as.Close = DateTime.Now; or_as.Status = (int)statusSting.Delete; int res = oas.SaveOracle_ArrivalSostav(or_as); if (res > 0) { delete++; } if (res < 1) { LogRW.LogError(String.Format("[KISTransfer.DeleteArrivalSostav] :Ошибка удаления данных из таблицы учета прибытия составов на АМКР, IDOrcSostav: {0}", or_as.IDOrcSostav), this.eventID); errors++; } } LogRW.LogWarning(String.Format("Определено удаленных ранее прибывших составов в системе КИС {0}, удалено из таблицы учета прибытия составов на АМКР {1}, ошибок удаления {2}", list.Count(), delete, errors), this.eventID); return(delete); }
/// <summary> /// Добавить новые составы появившиеся после переноса /// </summary> /// <param name="list"></param> protected int InsertArrivalSostav(List <PromSostav> list) { if (list == null | list.Count == 0) { return(0); } int insers = 0; int errors = 0; foreach (PromSostav ps in list) { int res = SaveArrivalSostav(ps, statusSting.Insert); if (res > 0) { insers++; } if (res < 1) { LogRW.LogError(String.Format("[KISTransfer.InsertArrivalSostav] :Ошибка добавления данных в таблицу учета прибытия составов на АМКР, натурный лист: {0}, дата:{1}-{2}-{3} {4}:{5}", ps.N_NATUR, ps.D_DD, ps.D_MM, ps.D_YY, ps.T_HH, ps.T_MI), this.eventID); errors++; } } LogRW.LogWarning(String.Format("Определено добавленных прибывших составов в системе КИС {0}, добавлено таблицу учета прибытия составов на АМКР {1}, ошибок добавления {2}", list.Count(), insers, errors), this.eventID); return(insers); }
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="day"></param> /// <returns></returns> public int ClearArrivingWagons(int day) { //TODO: ВЫПОЛНИТЬ чистку в системе RailWay int res_ca = transfer_rc.ClearArrivingWagons(new int[] { 1, 3, 9, 10, 11, 14, 18, 19, 21, 22, 25, 26 }, day); int res_cp = transfer_rc.ClearPendingWagons(new int[] { 1, 3, 9, 10, 11, 14, 18, 19, 21, 22, 25, 26 }, day); LogRW.LogWarning(String.Format("Очищено – закладка прибытие: {0} строк, закладка ожидают зачисления: {1} строк.", res_ca, res_cp), this.eventID); return(res_ca + res_cp); }
/// <summary> /// Перенести состав в справочник САП входящие поставки /// </summary> /// <param name="sostav"></param> /// <returns></returns> public int PutInSapIncomingSupply(trSostav sostav) { if (sostav == null) { return(0); } List <int> list_new_wag = new List <int>(); List <int> list_old_wag = new List <int>(); //if (sostav.Wagons != null) //{ list_new_wag = GetWagonsToListInt(sostav.Wagons); //} ResultTransfers result = new ResultTransfers(list_new_wag.Count(), 0, 0, 0, 0, 0); if (sostav.ParentID != null) { list_old_wag = sapis.GetSAPIncSupplyToNumWagons((int)sostav.ParentID); } DeleteExistWagon(ref list_new_wag, ref list_old_wag); // Удалим вагоны которых нет в новом составе foreach (int wag in list_old_wag) { result.SetResultDelete(sapis.DeleteSAPIncSupply((int)sostav.ParentID, wag)); } // Добавим вагоны которых нет в старом составе foreach (int wag in list_new_wag) { trWagon new_wag = GetWagons(sostav.Wagons, wag); result.SetResultInsert(sapis.SaveSAPIncSupply(ConvertWagonToSAPSupply(new_wag, sostav.id))); } // если есть старый состав обновим id и исправим нумерацию вагонов if (sostav.ParentID != null) { if (sostav.Wagons != null) { int res_upd = sapis.UpdateSAPIncSupplyIDSostav(sostav.id, (int)sostav.ParentID); foreach (trWagon wag in sostav.Wagons) { result.SetResultUpdate(sapis.UpdateSAPIncSupplyPosition(sostav.id, wag.CarriageNumber, wag.Position)); } } else { int res_del = sapis.DeleteSAPIncSupplySostav((int)sostav.ParentID); } } LogRW.LogWarning(String.Format("Определено для переноса в справочник САП входящие поставки {0} вагонов, удалено предыдущих вагонов: {1}, добавлено новых вагонов: {2}, обновлено позиций вагонов : {3}, общее количество ошибок: {4}.", result.counts, result.deletes, result.inserts, result.updates, result.errors), eventID); return(result.ResultInsert); }
public int CopySFTPFile(string fromFilePaths, string fromFileFiltr, string toTMPDirPath, string toDirPath, bool fromDeleteFile, bool toRewriteFile) { if (String.IsNullOrWhiteSpace(fromFilePaths) | String.IsNullOrWhiteSpace(toTMPDirPath)) { LogRW.LogError(String.Format("[SFTPClient.CopySFTPFile] :Не определен путь копирования fromFilePaths:{0}, toDirPath:{1}.", fromFilePaths, toDirPath), this.eventID); return(-1); } if (toDirPath == toTMPDirPath) { LogRW.LogError(String.Format("[SFTPClient.CopySFTPFile] :Путь для постоянного хранения перенесённых файлов toDirPath:{0}, совпадает с временным хранилищем для обработки toTMPDirPath:{1}.", toDirPath, toTMPDirPath), this.eventID); return(-1); } string[] listfromFile = this.client_sftp.GetFileList(fromFilePaths + "//" + fromFileFiltr); if (listfromFile == null | listfromFile.Count() == 0) { //LogRW.LogInformation(String.Format("На сервере SFTP отсутствуют файлы для копирования"), this.eventID); return(0); } int count = 0; int cdel = 0; foreach (string file in listfromFile) { // Если указана папка перенос в постоянное хранилище if (!String.IsNullOrWhiteSpace(toDirPath)) { client_sftp.Get(fromFilePaths + "//" + file, toDirPath + "\\"); } // Переносим во временное хранилище if ((toRewriteFile) | (!toRewriteFile & !ExistFile(toTMPDirPath + "\\" + file))) { client_sftp.Get(fromFilePaths + "//" + file, toTMPDirPath + "\\"); count++; } // Удалим файлы из host if (fromDeleteFile) { client_sftp.Rm(fromFilePaths + "//" + file); cdel++; } } string mess = String.Format("На сервере SFTP:{0} найдено {1} файлов, перенесено {2}", connect_SFTP.Host, listfromFile.Count(), count); if (fromDeleteFile) { mess = String.Format(mess + ", удаленно {0}", cdel); } LogRW.LogWarning(mess, this.eventID); 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: исправить возврат }
protected override void OnStart(string[] args) { // Update the service state to Start Pending. ServiceStatus serviceStatus = new ServiceStatus(); serviceStatus.dwCurrentState = ServiceState.SERVICE_START_PENDING; serviceStatus.dwWaitHint = 100000; SetServiceStatus(this.ServiceHandle, ref serviceStatus); LogRW.LogWarning(String.Format("Сервис {0} - запущен. Интервал выполнения - {1} мсек.", this.ServiceName, this.Interval.ToString()), this.eventID); // Set up a timer to trigger every minute. System.Timers.Timer timer = new System.Timers.Timer(); timer.Interval = this.Interval; // 60 seconds timer.Elapsed += new System.Timers.ElapsedEventHandler(this.OnTimer); timer.Start(); // Update the service state to Running. serviceStatus.dwCurrentState = ServiceState.SERVICE_RUNNING; SetServiceStatus(this.ServiceHandle, ref serviceStatus); }
/// <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> /// Перенос информации о составах по внутреним станциям по отправке /// </summary> /// <param name="day_control_ins"></param> /// <returns></returns> public int CopyOutputSostavToRailway(int day_control_ins) { int errors = 0; int normals = 0; // список новых составов в системе КИС List <NumVagStpr1OutStDoc> list_newsostav = new List <NumVagStpr1OutStDoc>(); // список уже перенесенных в RailWay составов в системе КИС (с учетом периода контроля dayControllingAddNatur) List <NumVagStpr1OutStDoc> list_oldsostav = new List <NumVagStpr1OutStDoc>(); // список уже перенесенных в RailWay составов (с учетом периода контроля dayControllingAddNatur) List <Oracle_OutputSostav> list_outputsostav = new List <Oracle_OutputSostav>(); try { // Считаем дату последненго состава DateTime?lastDT = oos.GetLastDateTime(); if (lastDT != null) { // Данные есть получим новые list_newsostav = GetNumVagStpr1OutStDocIsRules(((DateTime)lastDT).AddSeconds(1), DateTime.Now, false).ToList(); list_oldsostav = GetNumVagStpr1OutStDocIsRules(((DateTime)lastDT).AddDays(day_control_ins * -1), ((DateTime)lastDT).AddSeconds(1), false).ToList(); list_outputsostav = oos.GetOutputSostav(((DateTime)lastDT).AddDays(day_control_ins * -1), ((DateTime)lastDT).AddSeconds(1)).ToList(); } else { // Таблица пуста получим первый раз list_newsostav = GetNumVagStpr1OutStDocIsRules(DateTime.Now.AddDays(day_control_ins * -1), DateTime.Now, false).ToList(); } // Переносим информацию по новым составам if (list_newsostav.Count() > 0) { foreach (NumVagStpr1OutStDoc inps in list_newsostav) { int res = SaveOutputSostav(inps, statusSting.Normal); if (res > 0) { normals++; } if (res < 1) { errors++; } } LogRW.LogWarning(String.Format("Определено для переноса новых составов из базы данных КИС в таблицу учета прибытия составов (копирование по отправке из внутренних станций): {0}, перенесено {1}, ошибок переноса {2}", list_newsostav.Count(), normals, errors), this.eventID); } // Обновим информацию по составам которые были перенесены if (list_oldsostav.Count() > 0 & list_outputsostav.Count() > 0) { List <NumVagStpr1OutStDoc> list_os = new List <NumVagStpr1OutStDoc>(); list_os = list_oldsostav; List <Oracle_OutputSostav> list_oos = new List <Oracle_OutputSostav>(); list_oos = list_outputsostav.Where(a => a.Status != (int)statusSting.Delete).ToList(); DelExistOutputSostav(ref list_os, ref list_oos); int ins = InsertOutputSostav(list_os); int del = DeleteOutputSostav(list_oos); LogRW.LogWarning(String.Format("Определено для добавления {0}, добавлено {1}. Определено для удаления {2}, удалено {3} в таблице учета прибытия составов (копирование по отправке из внутренних станций)", list_os.Count(), ins, list_oos.Count(), del), this.eventID); normals += ins; } } catch (Exception e) { LogRW.LogError(String.Format("[KISTransfer.CopyOutputSostavToRailway]: Ошибка, источник: {0}, № {1}, описание: {2}", e.Source, e.HResult, e.Message), this.eventID); return(-1); } return(normals); }
protected override void OnStop() { LogRW.LogWarning(String.Format("Сервис {0} - остановлен", this.ServiceName), this.eventID); }
/// <summary> /// Синхронизировать справочник вагонов (тип, владелец, аренда, страна владельца) /// </summary> /// <param name="day"></param> /// <returns></returns> public int SynchronizeWagons(int day) { List <KometaVagonSob> list_shange = kc.GetChangeVagonsSob(day).ToList(); if (list_shange.Count() == 0) { return(0); } int updates = 0; int errors = 0; int skippeds = 0; foreach (KometaVagonSob kvs in list_shange) { int? owner = DefinitionIDOwner(kvs.SOB, null); // Определим id владельца (системы railCars) VAGONS wag_new = null; VAGONS wag = rs_vag.GetVagons(kvs.N_VAGON, kvs.DATE_AR); if (wag == null) { wag = rs_vag.GetNewVagons(kvs.N_VAGON, kvs.DATE_AR); if (wag == null) { // создадим новую строку с этой арендой wag_new = new VAGONS() { id_vag = 0, num = kvs.N_VAGON, id_ora = null, id_owner = owner, id_stat = null, is_locom = null, locom_seria = null, rod = kvs.ROD, st_otpr = "-", date_ar = kvs.DATE_AR, date_end = kvs.DATE_END, date_in = null, IDSostav = null, Natur = null, Transit = false, }; } else { // обновим аренду на вновь сосзданом wag_new = new VAGONS() { id_vag = wag.id_vag, num = wag.num, id_ora = wag.id_ora, id_owner = owner, id_stat = wag.id_stat, is_locom = wag.is_locom, locom_seria = wag.locom_seria, rod = kvs.ROD, st_otpr = wag.st_otpr, date_ar = kvs.DATE_AR, date_end = kvs.DATE_END, date_in = wag.date_in, IDSostav = wag.IDSostav, Natur = wag.Natur, Transit = wag.Transit, }; } } else { if (wag.date_ar < kvs.DATE_AR | wag.id_owner != owner) { // создадим новую строку с этой арендой старую закроем wag_new = new VAGONS() { id_vag = 0, num = kvs.N_VAGON, id_ora = null, id_owner = owner, id_stat = null, is_locom = null, locom_seria = null, rod = kvs.ROD, st_otpr = "-", date_ar = kvs.DATE_AR, date_end = kvs.DATE_END, date_in = null, IDSostav = null, Natur = null, Transit = false, }; if (wag.date_end == null) { wag.date_end = kvs.DATE_AR.AddMinutes(-1); rs_vag.SaveVAGONS(wag); } } else { skippeds++; } } if (wag_new != null) { int res = rs_vag.SaveVAGONS(wag_new); if (res > 0) { updates++; } if (res < 0) { errors++; } } } LogRW.LogWarning(String.Format("Определено для синхронизации справочника RailWay: {0} строк, синхронизировано: {1}, пропущено: {2}, ошибок синхронизации: {3}.", list_shange.Count(), updates, skippeds, errors), eventID); return(updates); }