示例#1
0
        /// <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);// Ошибка
            }
        }
示例#2
0
        /// <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);// Ошибка
            }
        }