From 3c37f39867e7f1a462ed5232701e0225bdd5945b Mon Sep 17 00:00:00 2001 From: "MH.Dmitrii" Date: Thu, 30 Oct 2025 12:42:52 +0300 Subject: [PATCH] validation file 1.1 (OOP) --- server/backend/excel.py | 96 ++++++++++++++++++++++++++++-- server/backend/validating_files.py | 76 ++++++++++------------- 2 files changed, 123 insertions(+), 49 deletions(-) diff --git a/server/backend/excel.py b/server/backend/excel.py index 71a2b8a..73460f0 100644 --- a/server/backend/excel.py +++ b/server/backend/excel.py @@ -1,8 +1,92 @@ import pandas as pd -def read_excel(base_dir): - try: - dfs = pd.read_excel(base_dir, sheet_name=None) - return dfs - except Exception as e: - raise f"⚠️ Ошибка при чтении {file.name}: {e}" +# def read_excel(base_dir): +# try: +# dfs = pd.read_excel(base_dir, sheet_name=None) +# return dfs +# except Exception as e: +# raise f"⚠️ Ошибка при чтении {file.name}: {e}" + +class BaseHandler: + def __init__(self, file_path): + self.file_path = file_path + self.dfs = self.read() + + def read(self): + try: + return pd.read_excel(self.file_path, sheet_name=None) + except Exception as e: + raise Exception(f"⚠️ Ошибка при чтении {self.file_path}: {e}") + + def process(self): + raise NotImplementedError + +class YandexHandler(BaseHandler): + def process(self): + # читаем Excel внутри объекта + dfs = pd.read_excel(self.file_path, sheet_name=None) + # проверяем наличие нужных листов + if "Получено от потребителей" not in dfs or "Возвращено потребителям" not in dfs: + raise Exception(f"В файле {self.file_path.name} отсутствуют необходимые листы") + # сама обработка + print("Реализация Яндекс") + +class WBHandler(BaseHandler): + def process(self): + dfs = pd.read_excel(self.file_path, sheet_name=None) + if "Sheet1" not in dfs : + raise Exception(f"В файле {self.file_path.name} отсутствуют необходимые листы") + print("Реализация WB") + +class OZONHandler(BaseHandler): + def process(self): + dfs = pd.read_excel(self.file_path, sheet_name=None) + if "Отчет о реализации" not in dfs : + raise Exception(f"В файле {self.file_path.name} отсутствуют необходимые листы") + print("Реализация OZON") + +class OZONPurchasesHandler(BaseHandler): + def process(self): + dfs = pd.read_excel(self.file_path, sheet_name=None) + if "Отчет о выкупленных товарах" not in dfs: + raise Exception(f"В файле {self.file_path.name} отсутствуют необходимые листы") + print("Выкупы озон") + +class WBPurchasesHandler(BaseHandler): + def process(self): + dfs = pd.read_excel(self.file_path, sheet_name=None) + if "Sheet1" not in dfs: + raise Exception(f"В файле {self.file_path.name} отсутствуют необходимые листы") + print("Выкупы wb") +class OZONComHandler(BaseHandler): + def process(self): + dfs = pd.read_excel(self.file_path, sheet_name=None) + if "Лист_1" not in dfs: + raise Exception(f"В файле {self.file_path.name} отсутствуют необходимые листы") + df = dfs["Лист_1"] + cont = df.iloc[1, 0] + if cont != "«Интернет решения» ООО": + raise Exception(f"В файле {self.file_path.name} неверный контрагент") + print("Товары, переданные на комиссию озон") + +class WBComHandler(BaseHandler): + def process(self): + dfs = pd.read_excel(self.file_path, sheet_name=None) + if "Лист_1" not in dfs: + raise Exception(f"В файле {self.file_path.name} отсутствуют необходимые листы") + df = dfs["Лист_1"] + cont = df.iloc[1, 0] + if cont != '"Вайлдберриз" ООО': + raise Exception(f"В файле {self.file_path.name} неверный контрагент") + print("Товары, переданные на комиссию wb") + +class YandexComHandler(BaseHandler): + def process(self): + dfs = pd.read_excel(self.file_path, sheet_name=None) + if "Лист_1" not in dfs: + raise Exception(f"В файле {self.file_path.name} отсутствуют необходимые листы") + df = dfs["Лист_1"] + cont = df.iloc[1, 0] + if cont != "Яндекс Маркет ООО": + raise Exception(f"В файле {self.file_path.name} неверный контрагент") + print("Товары, переданные на комиссию yandex") diff --git a/server/backend/validating_files.py b/server/backend/validating_files.py index 30e2014..52827a2 100644 --- a/server/backend/validating_files.py +++ b/server/backend/validating_files.py @@ -1,4 +1,4 @@ -from server.backend.excel import read_excel +import server.backend.excel as excel from dotenv import load_dotenv #Работа с env import os @@ -6,6 +6,17 @@ from pathlib import Path load_dotenv() base_dir = Path(os.getenv("DIR")) +handlers = { #метки какие файлы есть и должны быть занесены с вызовами функций из файла + "period_closure_income": excel.YandexHandler, + "0": excel.WBHandler, + "отчет о реализации товара": excel.OZONHandler, + "realizationreportcis": excel.OZONPurchasesHandler, + "уведомление о выкупе": excel.WBPurchasesHandler, + "Товары, переданные на комиссию озон": excel.OZONComHandler, + "Товары, переданные на комиссию вб": excel.WBComHandler, + "Товары, переданные на комиссию яндекс": excel.YandexComHandler +} + #Проход по всем файлам в директории def validating(): if not base_dir.exists(): @@ -17,52 +28,31 @@ def validating(): name = file.stem.lower() print(f"\n🔹 Файл: {file.name}") + label = None match file: case _ if "period_closure_income" in name: - dfs = read_excel(file) - if "Получено от потребителей" and "Возвращено потребителям" in dfs : - print("Реализация Яндекс ", name) - else: - raise Exception(f"В файле {name} отсутствуют необходимые листы") + label = "period_closure_income" case _ if name == "0": - dfs = read_excel(file) - if "Sheet1" in dfs : - print("Реализация ВБ", name) - else: - raise Exception(f"В файле {name} отсутствуют необходимые листы") + label = "0" case _ if "отчет о реализации товара" in name: - dfs = read_excel(file) - if "Отчет о реализации" in dfs : - print("Реализация ОЗОН", name) - else: - raise Exception(f"В файле {name} отсутствуют необходимые листы") - case _ if "вб" in name.lower() or "озон" in name.lower() or "яндекс" in name: - dfs = read_excel(file) - if "Лист_1" in dfs : - df = dfs["Лист_1"] - if df.iloc[1,0] == "«Интернет решения» ООО": - print("Товары, переданные на комиссию", name) - elif df.iloc[1,0] == "Яндекс Маркет ООО": - print("Товары, переданные на комиссию", name) - elif df.iloc[1,0] == '"Вайлдберриз" ООО': - print("Товары, переданные на комиссию", name) - else: - raise Exception(f"В файле {name} неизвестный контрагент") - else: - raise Exception(f"В файле {name} отсутствуют необходимые листы") - + label = "отчет о реализации товара" + case _ if "вб" in name: + label = "Товары, переданные на комиссию вб" + case _ if "озон" in name: + label = "Товары, переданные на комиссию озон" + case _ if "яндекс" in name: + label = "Товары, переданные на комиссию яндекс" case _ if "realizationreportcis" in name: - dfs = read_excel(file) - if "Отчет о выкупленных товарах" in dfs : - print("Выкупы озон", name) - else: - raise Exception(f"В файле {name} отсутствуют необходимые листы") - + label = "realizationreportcis" case _ if "уведомление о выкупе" in name: - dfs = read_excel(file) - if "Sheet1" in dfs : - print("Выкупы вб", name) - else: - raise Exception(f"В файле {name} отсутствуют необходимые листы") - case _: + label = "уведомление о выкупе" + case _: #Для неизвестных файлов print("Неизвестный файл") + if label: + handler_class = handlers.get(label) + if handler_class: + # создаём объект для текущего файла + handler = handler_class(file) # передаём путь к файлу + handler.process() # dfs читается внутри объекта + else: + print(f"⚠️ Нет обработчика для метки '{label}'")