Beispiel #1
0
        ///// <summary>
        /////     сгенерировать карточки согласно домам, правилам доступа и кодам.
        ///// </summary>
        //public void Generate()
        //{
        //    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 allDoors = GetAllDoors(allHomes, allRules, allCodes);
        //    var cards = GenerateCards(allHomes, allRules, allCodes, allDoors);
        //    Write(cards);
        //}

        /// <summary>
        /// Генерирует карточки
        /// </summary>
        /// <param name="uniqueEntry"></param>
        /// <param name="isSorted"></param>
        public void Generate(bool uniqueEntry, 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 map   = new HomeMap(allHomes, allCodes, allRules);
            var cards = GenerateCards(map, uniqueEntry, isSorted);

            Write(cards);
            //var doors = GetAllDoors(map);
        }
Beispiel #2
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);
            }
        }