/// <summary> /// Сгруппировать входящие поставки по номерам вагонов и обновить информацию по всем входящим поставкам по кждому вагону /// </summary> /// <param name="context"></param> /// <param name="list_cargo"></param> /// <param name="user"></param> /// <returns></returns> public ResultUpdateWagon UpdateListIncomingSupply(ref EFDbContext context, List <int> list_cargo, string user) { ResultUpdateWagon result = new ResultUpdateWagon(0); try { if (context == null) { context = new EFDbContext(); } // Проверим и скорректируем пользователя if (String.IsNullOrWhiteSpace(user)) { user = System.Environment.UserDomainName + @"\" + System.Environment.UserName; } EFSAPIncomingSupply ef_sap = new EFSAPIncomingSupply(context); List <IGrouping <int, SAPIncomingSupply> > group_sap_is = ef_sap .Context .Where(s => s.close == null) .ToList() .GroupBy(g => g.num) .ToList(); // Определим количество result.count = group_sap_is.Count(); int count_wag = result.count; foreach (IGrouping <int, SAPIncomingSupply> gr_sap_is in group_sap_is.ToList()) { // Номер вагона int num = gr_sap_is.Key; //Console.WriteLine("Обрабатываю вагон №{0}, Кол. вх. пост. = {1}, уже ошибок = {2}.", num, gr_sap_is.Count(), result.error); ResultUpdateID res_wag = UpdateIncomingSupply(ref context, list_cargo, num, gr_sap_is.OrderBy(w => w.id).ToList(), user); result.SetUpdateResult(res_wag.result, num); result.close += res_wag.close; result.skip += res_wag.skip; string mess = String.Format("Обработал вагон №{0}, Код выполнения={1}. Осталось обработать={2}", num, res_wag.result, count_wag--); if (res_wag.result >= 0) { mess.InformationLog(servece_owner, eventID); } else { mess.ErrorLog(servece_owner, eventID); } //Console.WriteLine("Обработал вагон №{0}, Код выполнения = {1}. Осталось обработать = {2}", num, res_wag.result, count_wag--); } return(result); } catch (Exception e) { e.ExceptionMethodLog(String.Format("UpdateListIncomingSupply(context = {0}, list_cargo = {1}, user = {2})", context, list_cargo, user), servece_owner, eventID); result.SetResult((int)errors_base.global); return(result);// Ошибка } }
//public void IDSTransfer_SetStationOutgoingWagonsOfKIS() //{ // IDSTransfer ids = new IDSTransfer(service.Test); // int res = ids.SetStationOutgoingWagonsOfKIS(513, @"EUROPE\test"); //} ///// <summary> ///// Перенос состава на УЗ и закрытие WIR ///// </summary> //public void IDSTransfer_SendingOutgoingSostav() //{ // IDSTransfer ids = new IDSTransfer(service.Test); // int res = ids.SendingOutgoingSostav(499, @"EUROPE\test"); //} #endregion #region IDS_SAP // чтение и обновление сап public void IDS_SAP_GetCurrentIncomingSupplyOfWebSAP() { IDS_SAP ids = new IDS_SAP(service.Test); EFSAPIncomingSupply ef_sap = new EFSAPIncomingSupply(new EFDbContext()); //SAPIncomingSupply sap = new SAPIncomingSupply() //{ // id = 0, // id_arrival_car = 0, // num = 54905161, // num_doc_uz = "29426762", // create = DateTime.Now, // create_user = "******" //}; SAPIncomingSupply sap = ef_sap.Context.Where(s => s.id == 141716).FirstOrDefault(); //sap.num = 54905161; //sap.num_doc_uz = "29426762"; SAPIncomingSupply res = ids.GetCurrentIncomingSupplyOfWebSAP(sap); }
/// <summary> /// Обновить информацию по всем входящим поставкам по указаному вагону /// </summary> /// <param name="context"></param> /// <param name="list_cargo"></param> /// <param name="num"></param> /// <param name="gr_sap_is"></param> /// <param name="user"></param> /// <returns></returns> public ResultUpdateID UpdateIncomingSupply(ref EFDbContext context, List <int> list_cargo, int num, List <SAPIncomingSupply> gr_sap_is, string user) { ResultUpdateID result = new ResultUpdateID(0); try { if (context == null) { context = new EFDbContext(); } // Проверим и скорректируем пользователя if (String.IsNullOrWhiteSpace(user)) { user = System.Environment.UserDomainName + @"\" + System.Environment.UserName; } EFSAPIncomingSupply ef_sap = new EFSAPIncomingSupply(context); EFArrivalCars ef_ac = new EFArrivalCars(context); EFArrival_UZ_Vagon ef_uz_vag = new EFArrival_UZ_Vagon(context); // Определим количество вх. поставок по указаному вагону int count_is = gr_sap_is.Count(); // Пройдемся по всем записям вх пост. отсортированых по возрастанию (последняя актуальная) foreach (SAPIncomingSupply sap in gr_sap_is.OrderBy(w => w.id).ToList()) { // Это последняя запись (или единственная) if (count_is == 1) { // Это Актуальная запиь ArrivalCars car = ef_ac.Context.Where(c => c.id == sap.id_arrival_car).FirstOrDefault(); if (car != null) { Arrival_UZ_Vagon uz_vag = ef_uz_vag.Context.Where(c => c.id == car.id_arrival_uz_vagon).FirstOrDefault(); if (uz_vag != null) { // Определить вагон на территории АМКР WagonInternalRoutes last_wir = context.GetLastWagon(num); if (last_wir != null && last_wir.close == null) { // Вагон на территории АМКР // Проверим на груз int id_cargo = list_cargo.ToList().Find(x => x == uz_vag.id_cargo); if (id_cargo == 0) { // Обновить SAPIncomingSupply sap_up = GetUpdateIncomingSupplyOfWebSAP(sap, user); // Обновим запись ef_sap.Update(sap_up); result.SetUpdateResult(1, sap_up.id); // Ок } else { // Закрыть этот вагон, по грузу sap.note = "Строка закрыта по данному грузу не формируется входящая поставка"; sap.close = DateTime.Now; sap.close_user = user; // Обновим запись ef_sap.Update(sap); //result.AddClose(); result.SetCloseResult(1, sap.id); // Ок } } else { // Закрыть это вагон вагон за территорией АМКР sap.note = "Строка закрыта, вагона нет на территории АМКР"; sap.close = DateTime.Now; sap.close_user = user; // Обновим запись ef_sap.Update(sap); //result.AddClose(); result.SetCloseResult(1, sap.id); // Ок } } else { DateTime limit_data = DateTime.Now.AddDays(-1 * this.day_approach_limit); // Проверка на время ожидания с подходов. if (sap.create >= limit_data) { // Вагон на подходах и лимит времени не прошол // Обновить SAPIncomingSupply sap_up = GetUpdateIncomingSupplyOfWebSAP(sap, user); // Обновим запись sap.note = "Вагон на подходах"; ef_sap.Update(sap_up); result.SetUpdateResult(1, sap_up.id); // Ок } else { // Вагон не принят, закрыть sap.note = "Строка закрыта, вагон не принят на АМКР"; sap.close = DateTime.Now; sap.close_user = user; // Обновим запись ef_sap.Update(sap); //result.AddClose(); result.SetCloseResult(1, sap.id); // Ок } } } else { result.SetResult((int)errors_base.not_arrival_cars_db); // Ошибка и выход } } else { // Закроем запись это старая sap.note = "Строка закрыта, запись не актуальная"; sap.close = DateTime.Now; sap.close_user = user; // Обновим запись ef_sap.Update(sap); //result.AddClose(); result.SetCloseResult(1, sap.id); // Ок } count_is--; } // Обновим в базе if (result.error == 0 && result.result == 0) { // Если без ошибок, тогда записываем результат применения result.SetResult(context.SaveChanges()); } return(result); } catch (Exception e) { e.ExceptionMethodLog(String.Format("UpdateIncomingSupply(context = {0}, list_cargo = {1}, num = {2}, gr_sap_is = {3}, user = {4})", context, list_cargo, num, gr_sap_is, user), servece_owner, eventID); result.SetResult((int)errors_base.global); return(result);// Ошибка } }