/// <summary> /// Выполнить сервис "Обновить все текущие входяшие поставки" /// </summary> /// <param name="list_cargo"></param> /// <param name="user"></param> /// <returns></returns> public int UpdateListIncomingSupply(List <int> list_cargo, string user) { try { DateTime start = DateTime.Now; ResultUpdateWagon res = new ResultUpdateWagon(0); // Проверим и скорректируем пользователя if (String.IsNullOrWhiteSpace(user)) { user = System.Environment.UserDomainName + @"\" + System.Environment.UserName; } EFDbContext context = new EFDbContext(); // Обновим вагоны res = UpdateListIncomingSupply(ref context, list_cargo, user); // Если операция успешна, перенумеруем позиции на пути с которого ушли вагоны if (res.error == 0) { res.SetResult(context.SaveChanges()); } string mess = String.Format("Операция обновления информации входящей поставки на вагоны. Код выполнения = {0}. Результат обновления [определено {1} вагонов, обновлено {2}, пропущено {3}, закрыто строк {4}, ошибок обновления {5}].", res.result, res.count, res.update, res.skip, res.close, res.error); mess.WarningLog(servece_owner, eventID); mess.EventLog(res.result < 0 ? EventStatus.Error : EventStatus.Ok, servece_owner, eventID); DateTime stop = DateTime.Now; servece_owner.ServicesToLog(eventID, String.Format("Операция обновления входящей поставки"), start, stop, res.result); return(res.result); } catch (Exception e) { e.ExceptionMethodLog(String.Format("UpdateListIncomingSupply(list_cargo = {0}, user = {1})", list_cargo, user), servece_owner, eventID); return(-1);// Возвращаем id=-1 , Ошибка } }
/// <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);// Ошибка } }
/// <summary> /// Обновим САП Входящие поставки /// </summary> /// <param name="user"></param> /// <returns></returns> public int UpdateSAPOutgoingSupply(string user) { try { DateTime start = DateTime.Now; ResultUpdateWagon res = new ResultUpdateWagon(0); // Проверим и скорректируем пользователя if (String.IsNullOrWhiteSpace(user)) { user = System.Environment.UserDomainName + @"\" + System.Environment.UserName; } EFDbContext context = new EFDbContext(); EFOut_Supply ef_out_sypp = new EFOut_Supply(context); string sql = "select * from [IDS].[get_view_wagons_of_balance]() where id_operator is null or id_operator NOT IN (SELECT [id_operator] FROM [KRR-PA-CNT-Railway].[IDS].[Directory_OperatorsWagonsGroup] where [group] in ('amkr_vz'))"; List <wagons_sap_os> list_all_wagons = context.Database.SqlQuery <wagons_sap_os>(sql).ToList(); int count = list_all_wagons.Count(); res.count = count; foreach (wagons_sap_os wagons in list_all_wagons) { // Дата прибытия вагона DateTime?dt = ((DateTime)wagons.arrival_date_adoption).Date; // Выберем подходящую исходящую поставку Out_Supply cur_out_sypp = ef_out_sypp.Context.Where(s => s.TRAID == wagons.num.ToString() && s.ERDAT >= dt).OrderBy(c => c.ERDAT).FirstOrDefault(); int res_upd = 0; if (cur_out_sypp != null) { res_upd = UpdateWIR_SAPOutgoingSupply(ref context, wagons.wir_id, cur_out_sypp, user); if (res_upd > 0) { if (res_upd == 1) { res.SetInsertResult(res_upd, wagons.num); } else { res.SetUpdateResult(res_upd, wagons.num); } } else { res.SetSkipResult(res_upd, wagons.num); } } else { res.SetSkipResult(res_upd, wagons.num); } Console.WriteLine("Вагон {0}, Код обновления ИП {1} осталось вагонов {2}", wagons.num, res_upd, --count); } // Если операция успешна, сохраним результат if (res.error == 0) { res.SetResult(context.SaveChanges()); } string mess = String.Format("Операция обновления информации исходящей поставки на вагоны. Код выполнения = {0}. Результат обновления [на АМКР определено {1} вагонов, добавлено ИП:{2}, обновлено ИП:{3}, пропущено ИП:{4}, закрыто ИП:{5}, ошибок обновления ИП:{6}].", res.result, res.count, res.add, res.update, res.skip, res.close, res.error); mess.WarningLog(servece_owner, eventID); mess.EventLog(res.result < 0 ? EventStatus.Error : EventStatus.Ok, servece_owner, eventID); DateTime stop = DateTime.Now; servece_owner.ServicesToLog(eventID, String.Format("Операция обновления исходящей поставки поставки"), start, stop, res.result); return(res.result); } catch (Exception e) { e.ExceptionMethodLog(String.Format("UpdateSAPOutgoingSupply(user = {0})", user), servece_owner, eventID); return(-1);// Возвращаем id=-1 , Ошибка } }