///// <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); }
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); } }