Обновить dags/OSV.py

This commit is contained in:
bn_user 2025-11-18 16:59:32 +00:00
parent 77976033f3
commit c127df2687
1 changed files with 151 additions and 105 deletions

View File

@ -2,7 +2,7 @@ import requests
import json import json
import pandas as pd import pandas as pd
import numpy as np import numpy as np
from datetime import datetime from datetime import datetime, timedelta
from requests.auth import HTTPBasicAuth from requests.auth import HTTPBasicAuth
from sqlalchemy import create_engine from sqlalchemy import create_engine
from airflow import DAG from airflow import DAG
@ -32,8 +32,35 @@ def get_db_engine():
) )
def read_data_1C(**kwargs): def read_data_1C(**kwargs):
"""
Создает DataFrame с ежедневным календарем и останавливается на дате T-2
Параметры:
start_year (int): начальный год (по умолчанию 2019)
end_year (int): конечный год (по умолчанию 2025)
Возвращает:
pandas.DataFrame: DataFrame с колонками Год, Месяц, День
"""
start_year = 2019
# Вычисляем дату T-2 (текущая дата минус 2 дня)
t_minus_2 = datetime.now() - timedelta(days=2)
t_minus_2 = t_minus_2.replace(hour=0, minute=0, second=0, microsecond=0)
print(f"Текущая дата: {datetime.now().strftime('%Y-%m-%d')}")
print(f"Дата T-2: {t_minus_2.strftime('%Y-%m-%d')}")
# Создаем диапазон дат от начала до T-2
start_date = f'{start_year}-01-01'
date_range = pd.date_range(start=start_date, end=t_minus_2, freq='D')
# Создаем пустой список для хранения данных
calendar_data = []
params = {"СписокСчетов": ["66","66.01","66.02", "66.03","66.04","66.21","66.22","66.23","66.24", "67","67.01","67.02", "67.03","67.04","67.21","67.22","67.23","67.24"]} params = {"СписокСчетов": ["66","66.01","66.02", "66.03","66.04","66.21","66.22","66.23","66.24", "67","67.01","67.02", "67.03","67.04","67.21","67.22","67.23","67.24"]}
query = """ВЫБРАТЬ # Проходим циклом по каждому дню
print("\nПрохождение по дням календаря:")
for i, date in enumerate(date_range):
query = f"""ВЫБРАТЬ
ОстаткиОбороты.Счет, ОстаткиОбороты.Счет,
ОстаткиОбороты.Субконто1, ОстаткиОбороты.Субконто1,
ОстаткиОбороты.Субконто2, ОстаткиОбороты.Субконто2,
@ -53,11 +80,10 @@ def read_data_1C(**kwargs):
ОстаткиОбороты.СуммаКонечныйРазвернутыйОстатокКт, ОстаткиОбороты.СуммаКонечныйРазвернутыйОстатокКт,
UUID(ОстаткиОбороты.Субконто2.Ссылка) КАК ИдентификаторДоговора, UUID(ОстаткиОбороты.Субконто2.Ссылка) КАК ИдентификаторДоговора,
UUID(ОстаткиОбороты.Субконто1.Ссылка) КАК ИдентификаторКонтрагента, UUID(ОстаткиОбороты.Субконто1.Ссылка) КАК ИдентификаторКонтрагента,
UUID(ОстаткиОбороты.Организация.Ссылка) КАК ИдентификаторКлиента UUID(ОстаткиОбороты.Организация.Ссылка) КАК ИдентификаторКлиента,
ОстаткиОбороты.Период КАК ДатаОтчета
ИЗ ИЗ
РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты КАК ОстаткиОбороты РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты( ДАТАВРЕМЯ({date.year},{date.month},{date.day}), ДАТАВРЕМЯ({date.year},{date.month},{date.day}), Регистратор, , Счет.Код в (&СписокСчетов), , ) КАК ОстаткиОбороты
ГДЕ
ОстаткиОбороты.Счет.Код В (&СписокСчетов)
""" """
auth = HTTPBasicAuth('obmen', 'bOR2W7w4') auth = HTTPBasicAuth('obmen', 'bOR2W7w4')
@ -101,6 +127,9 @@ def read_data_1C(**kwargs):
'ИдентификаторДоговора': 'uid_subkonto2', 'ИдентификаторДоговора': 'uid_subkonto2',
'ИдентификаторКонтрагента': 'uid_subkonto1', 'ИдентификаторКонтрагента': 'uid_subkonto1',
'ИдентификаторКлиента': 'uid_organizaciya' 'ИдентификаторКлиента': 'uid_organizaciya'
#DATE
'ДатаОтчета': 'get_date'
} }
df = df.rename(columns=field_mapping) df = df.rename(columns=field_mapping)
@ -114,7 +143,7 @@ def read_data_1C(**kwargs):
index=False, index=False,
method='multi' method='multi'
) )
conn.execute(f"DELETE FROM public.{table_name} where get_date = CURRENT_DATE::date::timestamp") # conn.execute(f"DELETE FROM public.{table_name} where get_date = (SELECT DISTINCT get_date FROM temp_{table_name})")
conn.execute(f""" conn.execute(f"""
INSERT INTO public.{table_name} INSERT INTO public.{table_name}
SELECT SELECT
@ -140,7 +169,24 @@ def read_data_1C(**kwargs):
, uid_organizaciya , uid_organizaciya
, CURRENT_DATE::date::timestamp , CURRENT_DATE::date::timestamp
FROM temp_{table_name} FROM temp_{table_name}
--ON CONFLICT (schet, uid_subkonto2, uid_subkonto1, uid_organizaciya) ON CONFLICT (schet, uid_subkonto2, uid_subkonto1, uid_organizaciya, get_date)
DO UPDATE SET
subkonto1 = EXCLUDED.subkonto1,
subkonto2 = EXCLUDED.subkonto2,
organizaciya = EXCLUDED.organizaciya,
nomer = EXCLUDED.nomer,
date_begin = EXCLUDED.date_begin,
date_end = EXCLUDED.date_end,
inn_subkonto1 = EXCLUDED.inn_subkonto1,
inn_organizaciya = EXCLUDED.inn_organizaciya,
summa_oborot = EXCLUDED.summa_oborot,
summa_oborot_dt = EXCLUDED.summa_oborot_dt,
summa_oborot_kt = EXCLUDED.summa_oborot_kt,
summa_konechnyy_ostatok = EXCLUDED.summa_konechnyy_ostatok,
summa_konechnyy_ostatok_dt = EXCLUDED.summa_konechnyy_ostatok_dt,
summa_konechnyy_ostatok_kt = EXCLUDED.summa_konechnyy_ostatok_kt,
summa_konechnyy_razvernutyy_ostatok_dt = EXCLUDED.summa_konechnyy_razvernutyy_ostatok_dt,
summa_konechnyy_razvernutyy_ostatok_kt = EXCLUDED.summa_konechnyy_razvernutyy_ostatok_kt
""" """
) )