public static WagonInternalOperation SetOpenOperation(this WagonInternalRoutes wir, int id_operation, DateTime date_start, int?id_condition, int?id_loading_status, string locomotive1, string locomotive2, string note, string user) { WagonInternalOperation wio_new = null; if (wir != null && wir.close == null) { WagonInternalOperation wio_last = wir.GetLastOperation(); wio_new = new WagonInternalOperation() { id = 0, id_operation = id_operation, operation_start = date_start, id_condition = (id_condition != null ? (int)id_condition : (wio_last != null ? wio_last.id_condition : 0)), id_loading_status = (id_loading_status != null ? (int)id_loading_status : (wio_last != null ? wio_last.id_loading_status : 0)), locomotive1 = locomotive1, locomotive2 = locomotive2, note = note, create = DateTime.Now, create_user = user, parent_id = wio_last.CloseOperation(date_start, null, user) }; wir.WagonInternalOperation.Add(wio_new); } return(wio_new); }
//TODO: Удалить после удаления всех старых операций /// <summary> /// Установить вагон на станцию на путь /// </summary> /// <param name="wir"></param> /// <param name="id_station"></param> /// <param name="id_way"></param> /// <param name="date_start"></param> /// <param name="position"></param> /// <param name="note"></param> /// <param name="user"></param> /// <returns></returns> public static WagonInternalRoutes SetStationWagon_old(this WagonInternalRoutes wir, int id_station, int id_way, DateTime date_start, int position, string note, string user) { if (wir != null && wir.close == null) { WagonInternalMovement wim = wir.GetLastMovement(); // Исключим попытку поставить дублирования записи постановки на путь if (wim == null || (wim != null && (wim.id_station != id_station || wim.id_way != id_way || wim.position != position))) { WagonInternalMovement wim_new = new WagonInternalMovement() { id = 0, //id_wagon_internal_routes = wir.id, id_station = id_station, //station_start = date_start, id_way = id_way, way_start = date_start, id_outer_way = null, outer_way_start = null, outer_way_end = null, position = position, create = DateTime.Now, create_user = user, note = note, parent_id = wim.CloseMovement(date_start, null, user) }; wir.WagonInternalMovement.Add(wim_new); } } return(wir); }
public static WagonInternalMovement SetStationWagon(this WagonInternalRoutes wir, int id_station, int id_way, DateTime date_start, int position, string note, string user, bool check_replay) { WagonInternalMovement wim_new = null; if (wir != null && wir.close == null) { // Получим последнее положение WagonInternalMovement wim = wir.GetLastMovement(); // Исключим попытку поставить дублирования записи постановки на путь if (wim == null || (wim != null && (wim.id_station != id_station || wim.id_way != id_way || wim.position != position || wim.id_outer_way != null))) { wim_new = new WagonInternalMovement() { id = 0, id_station = id_station, id_way = id_way, way_start = date_start, way_end = null, position = position, id_outer_way = null, outer_way_start = null, outer_way_end = null, create = DateTime.Now, create_user = user, num_sostav = null, note = note, parent_id = wim.CloseMovement(date_start, null, user), }; wir.WagonInternalMovement.Add(wim_new); } } return(wim_new); }
// TODO: Удалить /// <summary> /// Установить вагон на путь отправки /// </summary> /// <param name="wir"></param> /// <param name="id_outer_ways"></param> /// <param name="date_start"></param> /// <param name="position"></param> /// <param name="note"></param> /// <param name="user"></param> /// <returns></returns> public static WagonInternalRoutes SetSendingWagon_old(this WagonInternalRoutes wir, int id_outer_ways, DateTime date_start, int position, string note, string user) { if (wir != null && wir.close == null) { // Получим последнее положение WagonInternalMovement wim = wir.GetLastMovement(); // Исключим попытку поставить дублирования записи постановки на путь if (wim != null && wim.id_outer_way != id_outer_ways) { WagonInternalMovement wim_new = new WagonInternalMovement() { id = 0, id_station = wim.id_station, id_way = wim.id_way, way_start = wim.way_start, way_end = wim.way_end == null ? date_start : wim.way_end, id_outer_way = (int?)id_outer_ways, outer_way_start = date_start, outer_way_end = null, position = position, create = DateTime.Now, create_user = user, note = note, parent_id = wim.CloseMovement(date_start, null, user), }; wir.WagonInternalMovement.Add(wim_new); } } return(wir); }
public static WagonInternalOperation GetLastOperation(this WagonInternalRoutes wir) { if (wir.WagonInternalOperation == null) { return(null); } return(wir.WagonInternalOperation.OrderByDescending(o => o.id).FirstOrDefault()); }
/// <summary> /// Вернуть последнюю запись позиции вагона /// </summary> /// <param name="wir"></param> /// <returns></returns> public static WagonInternalMovement GetLastMovement(this WagonInternalRoutes wir) { if (wir.WagonInternalMovement == null) { return(null); } return(wir.WagonInternalMovement.OrderByDescending(m => m.id).FirstOrDefault()); }
/// <summary> /// Вернуть станцию на которой стоит вагон /// </summary> /// <param name="wir"></param> /// <returns></returns> public static int?GetCurrentStation(this WagonInternalRoutes wir) { if (wir == null || wir.WagonInternalMovement == null) { return(null); } WagonInternalMovement wim = wir.GetLastMovement(); return(wim != null ? (int?)wim.id_station : null); }
public IHttpActionResult GetWagonInternalRoutesOfOutgoingCarsID(long id) { try { WagonInternalRoutes cars = this.ef_ids .Context .Where(s => s.id_outgoing_car == id) .ToList() .Select(c => c.GetWagonInternalRoutes()).FirstOrDefault(); return(Ok(cars)); } catch (Exception e) { return(BadRequest(e.Message)); } }
public static long?CloseWagon(this WagonInternalRoutes wir, DateTime date_end, string note, string user) { if (wir == null) { return(null); } if (wir.close == null) { wir.note = note != null ? note : wir.note; wir.close = DateTime.Now; wir.close_user = user; wir.GetLastMovement().CloseMovement(date_end, note, user); wir.GetLastOperation().CloseOperation(date_end, note, user); // Далее добавить закрытие перемещений по требованию } return(wir.id); }
/// <summary> /// Вагон на территории АМКР с операцией предявлен? /// </summary> /// <param name="context"></param> /// <param name="num"></param> /// <returns></returns> public static bool?isLockPresentOperation(this EFDbContext context, int num) { WagonInternalRoutes wir = context.GetLastWagon(num); if (wir == null) { return(null); } if (wir.close == null) { WagonInternalOperation wio = wir.GetLastOperation(); if (wio == null) { return(null); } return(wio.id_operation == 9 ? true : false); } else { return(false); } }
/// <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); } }
/// <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);// Ошибка } }
/// <summary> /// Правка разметки по прибытию /// </summary> /// <param name="context"></param> /// <param name="arr_cars"></param> /// <param name="id_condition"></param> /// <param name="id_type"></param> /// <param name="date_rem_vag"></param> /// <param name="user"></param> /// <returns></returns> public int OperationUpdateWagonMarking(ref EFDbContext context, ArrivalCars arr_cars, int id_condition, int?id_type, DateTime?date_rem_vag, string user) { try { // Проверка контекста if (context == null) { context = new EFDbContext(); } // Проверим и скорректируем пользователя if (String.IsNullOrWhiteSpace(user)) { user = System.Environment.UserDomainName + @"\" + System.Environment.UserName; } // Определим наличие вагона в прибытии if (arr_cars == null) { return((int)errors_base.not_arrival_cars_db); // Ошибка, нет записи вагона по прибытию } // if (arr_cars.id_arrival_uz_vagon == null) { return((int)errors_base.not_arrival_uz_vagon); //Ошибка, нет сылки на документ прибывшего вагона } // Получим контекст список документов на принятые вагоны EFArrival_UZ_Vagon ef_arr_uz_vag = new EFArrival_UZ_Vagon(context); // Получим запись документа принятого вагона Arrival_UZ_Vagon arr_uz_vag = ef_arr_uz_vag.Context.Where(v => v.id == arr_cars.id_arrival_uz_vagon).FirstOrDefault(); if (arr_uz_vag == null) { return((int)errors_base.not_arrival_uz_vagon); //Ошибка, нет записи документа прибывшего вагона } // Получим контекст справочник вагонов EFDirectory_Wagons ef_dir_wag = new EFDirectory_Wagons(context); // Получим запись вагона из справочника Directory_Wagons wagon = ef_dir_wag.Context.Where(w => w.num == arr_uz_vag.num).FirstOrDefault(); if (wagon == null) { return((int)errors_base.not_dir_wagon_of_db); // Указаного вагона нет в базе } // Получим контекст Внутренего перемещения EFWagonInternalRoutes ef_wir = new EFWagonInternalRoutes(context); WagonInternalRoutes wir = ef_wir.Context.Where(r => r.id_arrival_car == arr_cars.id).FirstOrDefault(); if (wir == null) { return((int)errors_base.not_wir_db); // Ошибка, нет записи внутренего перемещения вагона } // Найдем первую запись WagonInternalOperation first_wio = wir.WagonInternalOperation.Where(o => o.parent_id == null).OrderBy(o => o.id).FirstOrDefault(); if (first_wio == null) { return((int)errors_base.not_wio_db); // Ошибка, нет записи операций внутренего перемещения вагона } int id_condition_first = first_wio.id_condition; // Определим все записи List <WagonInternalOperation> list_wio = wir.WagonInternalOperation.OrderBy(o => o.id).ToList(); // Обновим годность по внутренему перемещению foreach (WagonInternalOperation wio in list_wio) { if (wio.id_condition == id_condition_first) { wio.id_condition = id_condition; } else { break; // Дрогая годность выйти изцикла } } ef_wir.Update(wir); // Запись документа есть правим тип и годность по прибытию arr_uz_vag.id_condition = id_condition; arr_uz_vag.id_type = id_type; ef_arr_uz_vag.Update(arr_uz_vag); // Запись справочника есть, правим дату ремонта wagon.date_rem_vag = date_rem_vag; ef_dir_wag.Update(wagon); return(1); } catch (Exception e) { e.ExceptionMethodLog(String.Format("OperationUpdateWagonMarking(context={0}, arr_cars={1}, id_condition ={2}, id_type={3}, date_rem_vag ={4}, user={5})", context, arr_cars, id_condition, id_type, date_rem_vag, user), servece_owner, this.eventID); return((int)errors_base.global);// Ошибка } }