/// <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 , Ошибка } }
/// <summary> /// Обновим входящую поставку в WIR /// </summary> /// <param name="context"></param> /// <param name="id_wir"></param> /// <param name="out_sypp"></param> /// <param name="user"></param> /// <returns></returns> public int UpdateWIR_SAPOutgoingSupply(ref EFDbContext context, long id_wir, Out_Supply out_sypp, string user) { try { if (context == null) { context = new EFIDS.Concrete.EFDbContext(); } ; // Проверим и скорректируем пользователя if (String.IsNullOrWhiteSpace(user)) { user = System.Environment.UserDomainName + @"\" + System.Environment.UserName; } EFWagonInternalRoutes ef_wir = new EFWagonInternalRoutes(context); EFSAPOutgoingSupply ef_sap_os = new EFSAPOutgoingSupply(context); // Получим wir WagonInternalRoutes wir = ef_wir.Context.Where(w => w.id == id_wir).FirstOrDefault(); if (wir == null) { return((int)errors_base.not_wir_db); // В базе данных нет записи по WagonInternalRoutes (Внутреннее перемещение вагонов) } // Проверим sap исходящая поставка указана if (wir.id_sap_outbound_supply != null) { SAPOutgoingSupply sap_os = ef_sap_os.Context.Where(s => s.id == wir.id_sap_outbound_supply).FirstOrDefault(); if (sap_os == null) { return((int)errors_base.not_sap_os_db); // В базе данных нет записи по SAPOutgoingSupply (SAP Исходящая поставка) } // Проверим id соответсвуют (SAPOutgoingSupply и Out_Supply) if (sap_os.id_out_supply == out_sypp.id) { // Соответсвует обновим sap_os.id_outgoing_car = wir.id_outgoing_car; sap_os.num = wir.num; sap_os.VBELN = out_sypp.VBELN; sap_os.ERDAT = out_sypp.ERDAT; sap_os.ZBEZEI = out_sypp.ZBEZEI; sap_os.STAWN = out_sypp.STAWN; sap_os.NAME1_AG = out_sypp.NAME1_AG; sap_os.KUNNR_AG = out_sypp.KUNNR_AG; sap_os.ZRWNAME = out_sypp.ZRWNAME; sap_os.ZENDSTAT = out_sypp.ZENDSTAT; sap_os.ZCRSTNAME = out_sypp.ZCRSTNAME; sap_os.ZCROSSSTAT = out_sypp.ZCROSSSTAT; sap_os.ZZVES_NETTO = out_sypp.ZZVES_NETTO; sap_os.ABTNR = out_sypp.ABTNR; sap_os.VTEXT = out_sypp.VTEXT; sap_os.ZZDOLG = out_sypp.ZZDOLG; sap_os.ZZFIO = out_sypp.ZZFIO; sap_os.ZZPLATEL = out_sypp.ZZPLATEL; sap_os.ZZNAME_PLATEL = out_sypp.ZZNAME_PLATEL; //sap_os.note = out_sypp.note, sap_os.change = DateTime.Now; sap_os.change_user = user; ef_sap_os.Update(sap_os); return(2); // Обновлена } else { ef_sap_os.Delete(sap_os.id); // не соответсвует, удалим (и создадим новый) } } // Содадим и добавим новую исходящую поставку SAPOutgoingSupply sap_os_new = new SAPOutgoingSupply() { id = 0, id_out_supply = 0, id_outgoing_car = wir.id_outgoing_car, num = wir.num, VBELN = out_sypp.VBELN.Trim(), ERDAT = out_sypp.ERDAT, ZBEZEI = out_sypp.ZBEZEI.Trim(), STAWN = out_sypp.STAWN.Trim(), NAME1_AG = out_sypp.NAME1_AG.Trim(), KUNNR_AG = out_sypp.KUNNR_AG.Trim(), ZRWNAME = out_sypp.ZRWNAME.Trim(), ZENDSTAT = out_sypp.ZENDSTAT.Trim(), ZCRSTNAME = out_sypp.ZCRSTNAME.Trim(), ZCROSSSTAT = out_sypp.ZCROSSSTAT.Trim(), ZZVES_NETTO = out_sypp.ZZVES_NETTO, ABTNR = out_sypp.ABTNR.Trim(), VTEXT = out_sypp.VTEXT.Trim(), ZZDOLG = out_sypp.ZZDOLG.Trim(), ZZFIO = out_sypp.ZZFIO.Trim(), ZZPLATEL = out_sypp.ZZPLATEL.Trim(), ZZNAME_PLATEL = out_sypp.ZZNAME_PLATEL.Trim(), note = null, create = DateTime.Now, create_user = user, }; sap_os_new.Out_Supply = out_sypp; ef_sap_os.Add(sap_os_new); wir.SAPOutgoingSupply = sap_os_new; ef_wir.Update(wir); return(1); // Добавлена новая } catch (Exception e) { e.ExceptionMethodLog(String.Format("UpdateWIR_SAPOutgoingSupply(context = {0}, id_wir = {1}, cur_out_sypp = {2}, user = {3})", context, id_wir, out_sypp, user), servece_owner, eventID); return((int)errors_base.global); } }