Обновить 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 pandas as pd
import numpy as np
from datetime import datetime
from datetime import datetime, timedelta
from requests.auth import HTTPBasicAuth
from sqlalchemy import create_engine
from airflow import DAG
@ -32,8 +32,35 @@ def get_db_engine():
)
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"]}
query = """ВЫБРАТЬ
# Проходим циклом по каждому дню
print("\nПрохождение по дням календаря:")
for i, date in enumerate(date_range):
query = f"""ВЫБРАТЬ
ОстаткиОбороты.Счет,
ОстаткиОбороты.Субконто1,
ОстаткиОбороты.Субконто2,
@ -53,11 +80,10 @@ def read_data_1C(**kwargs):
ОстаткиОбороты.СуммаКонечныйРазвернутыйОстатокКт,
UUID(ОстаткиОбороты.Субконто2.Ссылка) КАК ИдентификаторДоговора,
UUID(ОстаткиОбороты.Субконто1.Ссылка) КАК ИдентификаторКонтрагента,
UUID(ОстаткиОбороты.Организация.Ссылка) КАК ИдентификаторКлиента
ИЗ
РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты КАК ОстаткиОбороты
ГДЕ
ОстаткиОбороты.Счет.Код В (&СписокСчетов)
UUID(ОстаткиОбороты.Организация.Ссылка) КАК ИдентификаторКлиента,
ОстаткиОбороты.Период КАК ДатаОтчета
ИЗ
РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты( ДАТАВРЕМЯ({date.year},{date.month},{date.day}), ДАТАВРЕМЯ({date.year},{date.month},{date.day}), Регистратор, , Счет.Код в (&СписокСчетов), , ) КАК ОстаткиОбороты
"""
auth = HTTPBasicAuth('obmen', 'bOR2W7w4')
@ -101,6 +127,9 @@ def read_data_1C(**kwargs):
'ИдентификаторДоговора': 'uid_subkonto2',
'ИдентификаторКонтрагента': 'uid_subkonto1',
'ИдентификаторКлиента': 'uid_organizaciya'
#DATE
'ДатаОтчета': 'get_date'
}
df = df.rename(columns=field_mapping)
@ -114,7 +143,7 @@ def read_data_1C(**kwargs):
index=False,
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"""
INSERT INTO public.{table_name}
SELECT
@ -140,7 +169,24 @@ def read_data_1C(**kwargs):
, uid_organizaciya
, CURRENT_DATE::date::timestamp
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
"""
)