Beispiel #1
0
        /// <summary>
        ///     Печатаем участки
        /// </summary>
        public void PrintVisual()
        {
            var cards = LoadingWork.LoadCards().Select(x => x.Value).ToList();

            //var codes = Helper.Helper.LoadCodes().Values.SelectMany(x => x).ToList();

            PrintVisual(cards);
        }
Beispiel #2
0
        /// <summary>
        ///     Возвращает список повторяющихся дверей
        /// </summary>
        /// <returns></returns>
        public List <Door> FindRepeated()
        {
            var doors = LoadingWork.LoadCards().SelectMany(x => x.Value.Doors).ToList();

            var distinct = doors.Distinct(new DoorComparer());

            return(doors.Except(distinct).ToList());
        }
Beispiel #3
0
        public void Repair(bool isSorted)
        {
            //
            // Загрузили из файлов всю инфу
            //
            var allHomes = LoadingWork.LoadSortedHomes().Values.SelectMany(x => x).ToList();
            var allRules = LoadingWork.LoadRules().Values.ToList().SelectMany(x => x).ToList();
            var allCodes = LoadingWork.LoadCodes().Values.ToList().SelectMany(x => x).ToList();
            var allCards = LoadingWork.LoadCards();
            // смапировали
            var map = new HomeMap(allHomes, allCodes, allRules);
            // сгенерили все двери
            var allDoors = GetAllDoors(map);

            //
            // Пока что не планируется поддержка заполнения новых квартир,
            // сопряжено с трудностями сортировки.
            // Пока что просто логгируем то, что есть ещё квартиры для заполнения
            //

            // список квартир, которых нет в домах, информация о которых
            // была скачана
            var notExisting = new List <Door>();

            foreach (var pair in allCards)
            {
                Card card = pair.Value;

                for (int i = 0; i < card.Doors.Count; i++)
                {
                    var find = allDoors.FirstOrDefault(x => x.IsTheSameObject(card.Doors[i]));
                    if (find == null)
                    {
                        notExisting.Add(card.Doors[i]);
                        continue;
                    }

                    // заменяем на новую
                    card.Doors[i] = find;
                }

                if (isSorted)
                {
                    card.Doors = card
                                 .Doors
                                 .OrderBy(x => x.Street)
                                 .ThenBy(x => x.HouseNumber, new HouseNumberComparerFromString())
                                 .ToList();
                }
                else
                {
                    card.Doors = card.Doors.Shuffle().ToList();
                }
            }

            if (notExisting.Any())
            {
                var all = notExisting.Aggregate("", (main, door) => main += door.ToString() + "\n");
                Tracer.Tracer.Instance.Write("Следующих квартир не существует в выбранных домах: \n\n" + all);
            }

            var cardDoors = allCards.SelectMany(x => x.Value.Doors).ToList();
            var needToAdd = allDoors.Except(cardDoors, new BaseFindableObjectComparer()).ToList();

            if (needToAdd.Any())
            {
                //var all = needToAdd.Aggregate("", (main, door) => main += door.ToString() + "\n");
                Tracer.Tracer.Instance.Write("Данных квартир нет в участках: \n\n" + string.Join("\n", needToAdd));
            }

            foreach (var pair in allCards)
            {
                // записали карточку
                var toWrite = JsonConvert.SerializeObject(pair.Value, Formatting.Indented);
                File.WriteAllText(pair.Key, toWrite);
            }
        }