/// <summary> /// Получить пакет данных trSostav /// </summary> /// <param name="id_sostav"></param> /// <returns></returns> public trSostav GetSostav(int id_sostav) { // Определим класс данных состав MTSostav sost = mtc.Get_MTSostav(id_sostav); // Определим код станции по справочникам int?codecs_in = refRW.GetCodeCSStations(int.Parse(sost.CompositionIndex.Substring(9, 4)) * 10); int?codecs_from = refRW.GetCodeCSStations(int.Parse(sost.CompositionIndex.Substring(0, 4)) * 10); // Определим класс данных вагоны List <trWagon> list_wag = new List <trWagon>(); list_wag = GetListWagonInArrival(mtc.Get_MTListToSostav(id_sostav), codecs_in, mtc.GetMTConsignee(tMTConsignee.AMKR)); List <MTSostav> list_mt = mtc.GetOperationMTSostavDestinct(sost.IDMTSostav); trSostav sostav = new trSostav() { id = sost.IDMTSostav, codecs_in_station = codecs_in, codecs_from_station = codecs_from, //FileName = sost.FileName, //CompositionIndex = sost.CompositionIndex, DateTime_on = list_mt.Count > 0 ? list_mt.Last().DateTime : sost.DateTime, DateTime_from = sost.DateTime, //Operation = sost.Operation, //Create = sost.Create, //Close = sost.Close, ParentID = sost.ParentID, Wagons = list_wag != null?list_wag.ToArray() : null, }; return(sostav); }
/// <summary> /// Определить наличие состава /// </summary> /// <param name="file"></param> /// <returns></returns> public bool IsExistSostav(string file) { MTSostav sostav = rep_MT.MTSostav.Where(s => s.FileName == file).FirstOrDefault(); if (sostav != null) { return(true); } return(false); }
/// <summary> /// Получить цепочку операций для состава /// </summary> /// <param name="list"></param> /// <param name="id_sostav"></param> protected void GetOperationMTSostav(ref List <MTSostav> list, int id_sostav) { MTSostav sostav = GetMTSostavOfParentID(id_sostav); if (sostav != null) { list.Add(sostav); GetOperationMTSostav(ref list, sostav.IDMTSostav); } }
/// <summary> /// Удалить состав /// </summary> /// <param name="IDMTSostav"></param> /// <returns></returns> public MTSostav DeleteMTSostav(int IDMTSostav) { MTSostav dbEntry = context_edit.MTSostav.Find(IDMTSostav); if (dbEntry != null) { context_edit.MTSostav.Remove(dbEntry); context_edit.SaveChanges(); } return(dbEntry); }
/// <summary> /// Получить список операций для состава /// </summary> /// <param name="id_sostav"></param> /// <returns></returns> public List <MTSostav> GetOperationMTSostav(int id_sostav) { List <MTSostav> list = new List <MTSostav>(); MTSostav sostav = Get_MTSostav(id_sostav); if (sostav != null) { list.Add(sostav); GetOperationMTSostav(ref list, id_sostav); } return(list); }
/// <summary> /// Получить список операций для состава от последней к первой /// </summary> /// <param name="list"></param> /// <param name="id_sostav"></param> protected void GetOperationMTSostavDestinct(ref List <MTSostav> list, int id_sostav) { MTSostav sostav = Get_MTSostav(id_sostav); if (sostav != null) { list.Add(sostav); if (sostav.ParentID != null) { GetOperationMTSostavDestinct(ref list, (int)sostav.ParentID); } } }
/// <summary> /// Получить список операций для состава от последней к первой /// </summary> /// <param name="id_sostav"></param> /// <returns></returns> public List <MTSostav> GetOperationMTSostavDestinct(int id_sostav) { List <MTSostav> list = new List <MTSostav>(); MTSostav sostav = Get_MTSostav(id_sostav); if (sostav != null) { list.Add(sostav); if (sostav.ParentID != null) { GetOperationMTSostavDestinct(ref list, (int)sostav.ParentID); } } return(list); }
/// <summary> /// Добавить или править состав /// </summary> /// <param name="mtsostav"></param> /// <returns></returns> public int SaveMTSostav(MTSostav mtsostav) { MTSostav dbEntry; if (mtsostav.IDMTSostav == 0) { dbEntry = new MTSostav() { FileName = mtsostav.FileName, CompositionIndex = mtsostav.CompositionIndex, DateTime = mtsostav.DateTime, Operation = mtsostav.Operation, Create = mtsostav.Create, Close = mtsostav.Close, ParentID = mtsostav.ParentID }; context_edit.MTSostav.Add(dbEntry); } else { dbEntry = context_edit.MTSostav.Find(mtsostav.IDMTSostav); if (dbEntry != null) { dbEntry.FileName = mtsostav.FileName; dbEntry.CompositionIndex = mtsostav.CompositionIndex; dbEntry.DateTime = mtsostav.DateTime; dbEntry.Operation = mtsostav.Operation; dbEntry.Create = mtsostav.Create; dbEntry.Close = mtsostav.Close; dbEntry.ParentID = mtsostav.ParentID; } } try { context_edit.SaveChanges(); } catch (Exception e) { return(-1); } return(dbEntry.IDMTSostav); }
/// <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()); }
private int ArrivalToRailWay(int id_sostav) { try { KIS_RC_Transfer rc_transfer = new KIS_RC_Transfer(); // Перенос в системе RailCars KIS_RW_Transfer rw_transfer = new KIS_RW_Transfer(); // Перенос в системе RailWay MTContent mtc = new MTContent(); ReferenceRailway refRW = new ReferenceRailway(); SAP_Transfer saptr = new SAP_Transfer(); // Определим класс данных состав MTSostav sost = mtc.Get_MTSostav(id_sostav); // Определим код станции по справочникам int?codecs_in = refRW.GetCodeCSStations(int.Parse(sost.CompositionIndex.Substring(9, 4)) * 10); int?codecs_from = refRW.GetCodeCSStations(int.Parse(sost.CompositionIndex.Substring(0, 4)) * 10); // Определим класс данных вагоны List <trWagon> list_wag = new List <trWagon>(); list_wag = GetListWagonInArrival(mtc.Get_MTListToSostav(id_sostav), codecs_in, mtc.GetMTConsignee(tMTConsignee.AMKR)); trSostav sostav = new trSostav() { id = sost.IDMTSostav, codecs_in_station = codecs_in, codecs_from_station = codecs_from, //FileName = sost.FileName, //CompositionIndex = sost.CompositionIndex, DateTime_from = sost.DateTime, //Operation = sost.Operation, //Create = sost.Create, //Close = sost.Close, ParentID = sost.ParentID, Wagons = list_wag != null?list_wag.ToArray() : null, }; // Поставим вагоны в систему RailCars int res_arc; try { //res_arc = rc_transfer.PutInArrival(sostav); res_arc = saptr.PutInSapIncomingSupply(sostav); if (res_arc < 0) { //LogRW.LogError(String.Format("[MT.ArrivalToRailWay] :Ошибка переноса состава в прибытие системы RailCars, состав: {0}, код ошибки: {1}.", sostav.id, res_arc), this.eventID); } } catch (Exception e) { //LogRW.LogError(String.Format("[MT.ArrivalToRailWay] :Ошибка переноса состава в прибытие системы RailCars, состав: {0}. Подробно: (источник: {1}, № {2}, описание: {3})", sostav.id, e.Source, e.HResult, e.Message), this.eventID); res_arc = -1; } // Поставим вагоны в систему RailWay // TODO: Выполнить код постановки вагонов в систему RailWay (прибытие из КР) // .................. } catch (AggregateException agex) { agex.Handle(ex => { //LogRW.LogError(String.Format("[MT.ArrivalToRailWay]: Общая ошибка переноса состава в прибытие системы RailWay (источник: {0}, № {1}, описание: {2})", ex.Source, ex.HResult, ex.Message), this.eventID); return(true); }); return(-1); } return(0);//TODO: исправить возврат }
public void Read_Sostav() { // Arrange - create the mock repository mock_mt.Setup(m => m.MTSostav).Returns(new MTSostav[] { new MTSostav() { IDMTSostav = 1, FileName = "regl_8701-058-4670_2016082212254.xml", CompositionIndex = "8701-058-4670", DateTime = DateTime.Parse("2016-08-22 12:25:00.000"), Operation = 1, Create = DateTime.Parse("2016-09-07 15:07:45.000"), Close = DateTime.Parse("2016-09-07 15:07:45.697"), ParentID = null }, new MTSostav() { IDMTSostav = 2, FileName = "regl_8701-058-4670_2016082212353.xml", CompositionIndex = "8701-058-4670", DateTime = DateTime.Parse("2016-08-22 12:35:00.000"), Operation = 2, Create = DateTime.Parse("2016-09-07 15:07:45.000"), Close = null, ParentID = 1 }, new MTSostav() { IDMTSostav = 3, FileName = "regl_4670-731-4672_2016082214000.xml", CompositionIndex = "4670-731-4672", DateTime = DateTime.Parse("2016-08-22 14:00:00.000"), Operation = 1, Create = DateTime.Parse("2016-09-07 15:07:46.000"), Close = null, ParentID = null }, }.AsQueryable()); // Arrange - create the controller MTContent target = new MTContent(mock_mt.Object); // Act // Проверка MTSostav mts = target.Get_MTSostav(1); MTSostav mts_null = target.Get_MTSostav(0); List <MTSostav> list_ci = target.Get_MTSostav("8701-058-4670").ToList(); List <MTSostav> list_all = target.Get_MTSostav().ToList(); bool sostav_exist = target.IsExistSostav("regl_8701-058-4670_2016082212353.xml"); bool sostav_not_exist = target.IsExistSostav("1regl_8701-058-4670_2016082212353.xml"); MTSostav mts_notClose = target.Get_NoCloseMTSostav("8701-058-4670", DateTime.Parse("2016-08-23 12:35:00.000")); MTSostav mts_notClose_null = target.Get_NoCloseMTSostav("8701-058-4670", DateTime.Parse("2016-08-21 12:35:00.000")); // Assert // Assert.AreEqual("regl_8701-058-4670_2016082212254.xml", mts.FileName); Assert.AreEqual("8701-058-4670", mts.CompositionIndex); Assert.AreEqual("2016-08-22 12:25:00.000", mts.DateTime.ToString("yyyy-MM-dd HH:mm:ss.000")); Assert.AreEqual(1, mts.Operation); Assert.AreEqual("2016-09-07 15:07:45.000", mts.Create.ToString("yyyy-MM-dd HH:mm:ss.000")); Assert.AreEqual("2016-09-07 15:07:45.697", ((DateTime)mts.Close).ToString("yyyy-MM-dd HH:mm:ss.697")); Assert.AreEqual(null, mts.ParentID); Assert.AreEqual(null, mts_null); Assert.AreEqual(2, list_ci.Count()); Assert.AreEqual(1, list_ci[0].IDMTSostav); Assert.AreEqual(2, list_ci[1].IDMTSostav); Assert.AreEqual(3, list_all.Count()); Assert.AreEqual(true, sostav_exist); Assert.AreEqual(false, sostav_not_exist); Assert.AreEqual(2, mts_notClose.IDMTSostav); Assert.AreEqual(null, mts_notClose_null); }
/// <summary> /// Добавить или править состав /// </summary> /// <param name="mtsostav"></param> /// <returns></returns> public int SaveMTSostav(MTSostav mtsostav) { return(rep_MT.SaveMTSostav(mtsostav)); }