From d85b2db7dbcfdf09a53823f15157c1c6f6cae428 Mon Sep 17 00:00:00 2001 From: "MH.Dmitrii" Date: Thu, 18 Jun 2026 17:19:26 +0300 Subject: [PATCH] fix arti resolve --- server/backend/handlers/digitalization.py | 9 ++++++++- server/backend/handlers/ozon_handler.py | 7 +++++++ server/backend/handlers/ozon_purchases_handler.py | 7 +++++++ server/backend/handlers/ozon_wb_yandex_com_handler.py | 7 +++++++ server/backend/handlers/wb_handler.py | 7 +++++++ server/backend/handlers/wb_purchases_handler.py | 7 +++++++ server/backend/handlers/yandex_handler.py | 7 +++++++ 7 files changed, 50 insertions(+), 1 deletion(-) diff --git a/server/backend/handlers/digitalization.py b/server/backend/handlers/digitalization.py index 58afa61..10cbbef 100644 --- a/server/backend/handlers/digitalization.py +++ b/server/backend/handlers/digitalization.py @@ -12,7 +12,14 @@ def process_sheet(df,real_arti: int): df.columns = ['arti'] # нормализация df['arti'] = df['arti'].replace(Translit.TRANSLIT, regex=True) - df['arti'] = df['arti'].astype(str).str.upper().str.extract(f'({settings.PATTERN})') + df['arti'] = df['arti'].astype(str).str.upper().str.extract(f'({settings.PATTERN})') # Удаляем пустые строки + def normalize(arti): + if re.search(r'\d{3,}$', arti): + return re.sub(r'(\d)\d{2,}$', r'\1', arti) + else: + return re.sub(r'\d{1,2}$', '', arti) + + df['arti'] = df['arti'].apply(normalize) # группировка df = processing(df) validated_rows, errors = [], [] diff --git a/server/backend/handlers/ozon_handler.py b/server/backend/handlers/ozon_handler.py index 834110e..d85e03b 100644 --- a/server/backend/handlers/ozon_handler.py +++ b/server/backend/handlers/ozon_handler.py @@ -23,6 +23,13 @@ def process_sheet(df,real_arti: int,real_quantity: int,real_sum_1: int,real_sum_ # нормализация df['arti'] = df['arti'].replace(Translit.TRANSLIT, regex=True) df['arti'] = df['arti'].astype(str).str.upper().str.extract(f'({settings.PATTERN})') + def normalize(arti): + if re.search(r'\d{3,}$', arti): + return re.sub(r'(\d)\d{2,}$', r'\1', arti) + else: + return re.sub(r'\d{1,2}$', '', arti) + + df['arti'] = df['arti'].apply(normalize) df['price'] = df['price'].astype(float) df['counts'] = df['counts'].astype(int) diff --git a/server/backend/handlers/ozon_purchases_handler.py b/server/backend/handlers/ozon_purchases_handler.py index 24a1d34..acedde9 100644 --- a/server/backend/handlers/ozon_purchases_handler.py +++ b/server/backend/handlers/ozon_purchases_handler.py @@ -24,6 +24,13 @@ def process_sheet(df, real_arti:int, real_quantity:int, real_sum_1:int): # нормализация df['arti'] = df['arti'].replace(Translit.TRANSLIT, regex=True) df['arti'] = df['arti'].astype(str).str.upper().str.extract(f'({settings.PATTERN})') + def normalize(arti): + if re.search(r'\d{3,}$', arti): + return re.sub(r'(\d)\d{2,}$', r'\1', arti) + else: + return re.sub(r'\d{1,2}$', '', arti) + + df['arti'] = df['arti'].apply(normalize) df['price'] = df['price'].astype(float) df['counts'] = df['counts'].astype(int) diff --git a/server/backend/handlers/ozon_wb_yandex_com_handler.py b/server/backend/handlers/ozon_wb_yandex_com_handler.py index c5d1bca..1d7adb9 100644 --- a/server/backend/handlers/ozon_wb_yandex_com_handler.py +++ b/server/backend/handlers/ozon_wb_yandex_com_handler.py @@ -17,6 +17,13 @@ def process_sheet(df, real_arti:str, real_quantity:str, real_sum_1:str): #Нормализация df['arti'] = df['arti'].replace(Translit.TRANSLIT, regex=True) df['arti'] = df['arti'].astype(str).str.upper().str.extract(f'({settings.PATTERN})') #arti под regex + def normalize(arti): + if re.search(r'\d{3,}$', arti): + return re.sub(r'(\d)\d{2,}$', r'\1', arti) + else: + return re.sub(r'\d{1,2}$', '', arti) + + df['arti'] = df['arti'].apply(normalize) df['price'] = df['price'].astype(float) #переделка к норм виду и преобразование в float df['counts'] = df['counts'].astype(int) #Float to Int, if exists diff --git a/server/backend/handlers/wb_handler.py b/server/backend/handlers/wb_handler.py index 918f3cd..c397966 100644 --- a/server/backend/handlers/wb_handler.py +++ b/server/backend/handlers/wb_handler.py @@ -20,6 +20,13 @@ def process_sheet(df, document_type:str): #Нормализация df['arti'] = df['arti'].replace(Translit.TRANSLIT, regex=True) df['arti'] = df['arti'].astype(str).str.upper().str.extract(f'({settings.PATTERN})') #arti под regex + def normalize(arti): + if re.search(r'\d{3,}$', arti): + return re.sub(r'(\d)\d{2,}$', r'\1', arti) + else: + return re.sub(r'\d{1,2}$', '', arti) + + df['arti'] = df['arti'].apply(normalize) df['price'] = df['price'].astype(float) #Float to Int, if exists df['counts'] = df['counts'].astype(int) #Float to Int, if exists diff --git a/server/backend/handlers/wb_purchases_handler.py b/server/backend/handlers/wb_purchases_handler.py index 9fbd847..4aae134 100644 --- a/server/backend/handlers/wb_purchases_handler.py +++ b/server/backend/handlers/wb_purchases_handler.py @@ -18,6 +18,13 @@ def process_sheet(df, real_arti:str, real_quantity:str, real_sum_1:str): df.rename(columns={"Unnamed: 1": 'arti', "Unnamed: 3": 'counts', "Unnamed: 4": 'price'}, inplace=True) #переименовываем для pydantic #Нормализация df['arti'] = df['arti'].astype(str).str.upper().str.extract(f'({settings.PATTERN})') #arti под regex + def normalize(arti): + if re.search(r'\d{3,}$', arti): + return re.sub(r'(\d)\d{2,}$', r'\1', arti) + else: + return re.sub(r'\d{1,2}$', '', arti) + + df['arti'] = df['arti'].apply(normalize) df['arti'] = df['arti'].replace(Translit.TRANSLIT, regex=True) df['price'] = df['price'].str.replace(' ', '', regex=False).str.replace(',', '.', regex=False).astype(float) #переделка к норм виду и преобразование в float df['counts'] = df['counts'].astype(int) #Float to Int, if exists diff --git a/server/backend/handlers/yandex_handler.py b/server/backend/handlers/yandex_handler.py index 86db072..ec016db 100644 --- a/server/backend/handlers/yandex_handler.py +++ b/server/backend/handlers/yandex_handler.py @@ -18,6 +18,13 @@ def process_sheet(df, multiply_price=1, sheet_name=''): #Нормализация df['arti'] = df['arti'].replace(Translit.TRANSLIT, regex=True) df['arti'] = df['arti'].astype(str).str.upper().str.extract(f'({settings.PATTERN})') #arti под regex + def normalize(arti): + if re.search(r'\d{3,}$', arti): + return re.sub(r'(\d)\d{2,}$', r'\1', arti) + else: + return re.sub(r'\d{1,2}$', '', arti) + + df['arti'] = df['arti'].apply(normalize) df['price'] = df['price'].astype(float) #To float, if exists df['counts'] = df['counts'].astype(int) #To float, if exists