fix bug
This commit is contained in:
@@ -90,46 +90,57 @@ class ExcelProcessor:
|
||||
pattern = r'^\d{1,2}:\d{1,2}:\d{6,8}:\d{1,5}$'
|
||||
return bool(re.match(pattern, text))
|
||||
|
||||
def update_excel_with_file_info(self, cadastral_to_file_map: Dict[str, str],
|
||||
output_file_path: str = None) -> bool:
|
||||
"""Обновляет Excel файл информацией о найденных файлах и смежных номерах"""
|
||||
def update_excel_with_cadastral_records(self, cadastral_records: List,
|
||||
output_file_path: str = None) -> bool:
|
||||
"""Обновляет Excel файл информацией о найденных кадастровых объектах"""
|
||||
try:
|
||||
from models.cadastral_record import CadastralRecord
|
||||
|
||||
if self.df is None or self.cadastral_column is None:
|
||||
print("Excel файл не загружен или не найдена колонка с номерами")
|
||||
return False
|
||||
|
||||
# Создаем карту файл -> множество кадастровых номеров для поиска смежных
|
||||
file_to_numbers_map = {}
|
||||
for number, file_path in cadastral_to_file_map.items():
|
||||
if file_path not in file_to_numbers_map:
|
||||
file_to_numbers_map[file_path] = set()
|
||||
file_to_numbers_map[file_path].add(number)
|
||||
# Создаем карты для быстрого поиска
|
||||
# номер -> запись объекта
|
||||
number_to_record = {}
|
||||
for record in cadastral_records:
|
||||
# Основной номер
|
||||
number_to_record[record.main_number] = record
|
||||
# Все остальные номера тоже ведут к тому же объекту
|
||||
for number in record.other_numbers:
|
||||
number_to_record[number] = record
|
||||
|
||||
# Добавляем новые колонки
|
||||
self.df['Найденные файлы'] = ''
|
||||
self.df['Смежные кадастровые номера'] = ''
|
||||
self.df['Найден в файле'] = ''
|
||||
self.df['Основной номер объекта'] = ''
|
||||
self.df['Дополнительные номера'] = ''
|
||||
self.df['Кадастровый блок'] = ''
|
||||
|
||||
# Заполняем информацию для каждой строки
|
||||
matched_count = 0
|
||||
for index, row in self.df.iterrows():
|
||||
cadastral_number = str(row[self.cadastral_column]).strip()
|
||||
|
||||
if cadastral_number in cadastral_to_file_map:
|
||||
# 1. Получаем файл(ы) где найден номер
|
||||
main_file_path = cadastral_to_file_map[cadastral_number]
|
||||
file_name = Path(main_file_path).name
|
||||
self.df.at[index, 'Найденные файлы'] = file_name
|
||||
if cadastral_number in number_to_record:
|
||||
record = number_to_record[cadastral_number]
|
||||
matched_count += 1
|
||||
|
||||
# 2. Находим все смежные кадастровые номера из того же файла
|
||||
if main_file_path in file_to_numbers_map:
|
||||
all_numbers_in_file = file_to_numbers_map[main_file_path]
|
||||
# Исключаем текущий номер из списка смежных
|
||||
adjacent_numbers = all_numbers_in_file - {cadastral_number}
|
||||
if adjacent_numbers:
|
||||
self.df.at[index, 'Смежные кадастровые номера'] = ', '.join(sorted(adjacent_numbers))
|
||||
# 1. Имя файла
|
||||
file_name = Path(record.file_path).name
|
||||
self.df.at[index, 'Найден в файле'] = file_name
|
||||
|
||||
# 3. Определяем кадастровый блок (первые три части номера)
|
||||
cadastral_block = self._extract_cadastral_block(cadastral_number)
|
||||
# 2. Основной номер объекта
|
||||
self.df.at[index, 'Основной номер объекта'] = record.main_number
|
||||
|
||||
# 3. Дополнительные номера в объекте (без основного)
|
||||
other_numbers_sorted = sorted(record.other_numbers)
|
||||
if other_numbers_sorted:
|
||||
self.df.at[index, 'Дополнительные номера'] = ', '.join(other_numbers_sorted)
|
||||
else:
|
||||
self.df.at[index, 'Дополнительные номера'] = ''
|
||||
|
||||
# 4. Кадастровый блок (от основного номера)
|
||||
cadastral_block = self._extract_cadastral_block(record.main_number)
|
||||
if cadastral_block:
|
||||
self.df.at[index, 'Кадастровый блок'] = cadastral_block
|
||||
|
||||
@@ -138,6 +149,7 @@ class ExcelProcessor:
|
||||
self.df.to_excel(output_path, index=False, engine='openpyxl')
|
||||
|
||||
print(f"Обновленный Excel файл сохранен: {output_path}")
|
||||
print(f"Найдено совпадений: {matched_count} из {len(self.cadastral_numbers)}")
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
|
||||
Reference in New Issue
Block a user