Beispiel #1
0
 def fr_to_sql(df):
     df = df[df['Дата создания РЗ'] != '']
     del df['Ведомственная принадлежность']
     del df['Осложнение основного диагноза']
     # ==== Репорт о количестве выздоровевших =====
     report = pd.DataFrame()
     report.loc[0, 'date_rows'] = pd.to_datetime(
         df['Дата создания РЗ'], format='%d.%m.%Y').max().date()
     report.loc[0, 'value_name'] = 'Всего выздоровело от COVID'
     report.loc[0, 'value_count'] = len(
         df[df['Исход заболевания'].isin(['Выздоровление'])
            & df['Диагноз'].isin(['U07.1'])])
     report.to_sql('values',
                   con,
                   schema='robo',
                   index=False,
                   if_exists='append')
     # ============
     send_all('Файл в памяти, количество строк: ' + str(len(df)))
     sql_execute('TRUNCATE TABLE [dbo].[cv_input_fr]')
     send_all('Очистил input_fr')
     df.to_sql('cv_input_fr',
               con,
               schema='dbo',
               if_exists='append',
               index=False)
     send_all('Загрузил input_fr, запускаю процедуру')
     sql_execute('EXEC [dbo].[cv_Load_FedReg]')
     if check_table('fedreg'):
         send_all('Федеральный регистр успешно загружен')
         return 1
     else:
         send_all('Произошла какая-то проблема с загрузкой фр')
         return 0
Beispiel #2
0
 def read_part_df(excel, number):
     nameSheetShablon = "Sheet1"
     df = pd.read_excel(excel,
                        sheet_name=nameSheetShablon,
                        dtype=str,
                        skiprows=1,
                        head=1)
     send_all('прочтен файлик номер ' + list_numbers[number])
     return df
Beispiel #3
0
 def fr_death_to_sql(df):
     send_all('Обрезаю слишком длинные строки')
     for column in df.columns:
         for i in range(len(df)):
             df.loc[i, column] = str(df.at[i, column])[:255]
     send_all('Убираю Nan из таблицы')
     for column in df.columns:
         df[column] = df[column].str.replace(r'nan', '')
     send_all('Отправляю в базу')
     df.to_sql('cv_input_fr_d_all_2',
               con,
               schema='dbo',
               if_exists='replace',
               index=False)
     send_all('Запускаю процедуры')
     sql_execute("""
             EXEC   [dbo].[Insert_Table_cv_input_fr_d_all_2]
             EXEC   [dbo].[cv_from_d_all_to_d_covid]
             EXEC   [dbo].[cv_Load_FedReg_d_All]
             EXEC   [dbo].[cv_Load_FedReg_d_covid]
                 """)
     send_all('Успешно загружено')
     return 1
Beispiel #4
0
 def fr_to_sql(df):
     df = df[df['Дата создания РЗ'] != '']
     del df['Ведомственная принадлежность']
     del df['Осложнение основного диагноза']
     send_all('Файл в памяти, количество строк: ' + str(len(df)))
     sql_execute('TRUNCATE TABLE [dbo].[cv_input_fr]')
     send_all('Очистил input_fr')
     df.to_sql('cv_input_fr',
               con,
               schema='dbo',
               if_exists='append',
               index=False)
     send_all('Загрузил input_fr, запускаю процедуру')
     sql_execute('EXEC [dbo].[cv_Load_FedReg]')
     send_all('Федеральный регистр успешно загружен')
     return 1
Beispiel #5
0
 def fr_lab_to_sql(df):
     send_all('Ну, тут надо переименовать колонки и можно грузить')
     i = 1
     for column in df.columns:
         df.rename(columns={column: str(i)}, inplace=True)
         i += 1
     df = df.dropna(subset=['1', '2', '3', '4', '5', '6'])
     send_all('Всего строк в  лабе ' + str(len(df)))
     df.to_sql('cv_input_fr_lab_2',
               con,
               schema='dbo',
               if_exists='replace',
               index=False)
     send_all('Остались процедуры в базе')
     sql_execute("""
                 EXEC   [dbo].[Insert_Table_cv_input_fr_lab_2]
                 EXEC   [dbo].[cv_load_frlab]
                 """)
     if check_table('fedreg_lab'):
         send_all('Лаборатория успешно загружена')
         return 1
     else:
         send_all('Какая-то проблема с загрузкой лаборатории')
         return 0
Beispiel #6
0
 def UMSRS_to_sql(df):
     df.to_sql('cv_input_umsrs_2',
               con,
               schema='dbo',
               if_exists='append',
               index=False)
     send_all('Данные загружены в input_umsrs_2, запускаю процедурки')
     sql_execute("""
                 EXEC   [dbo].[Insert_Table_cv_input_umsrs_2]
                 EXEC   [dbo].[cv_Load_UMSRS]
                 """)
     if check_table('umsrs'):
         send_all('Успешно выполнено!')
         return 1
     else:
         send_all('Какая-то проблема с загрузкой УМСРС')
         return 0
Beispiel #7
0
def load_fr_lab():
    def fr_lab_to_sql(df):
        send_all('Ну, тут надо переименовать колонки и можно грузить')
        i = 1
        for column in df.columns:
            df.rename(columns={column: str(i)}, inplace=True)
            i += 1
        df = df.dropna(subset=['1', '2', '3', '4', '5', '6'])
        send_all('Всего строк в  лабе ' + str(len(df)))
        df.to_sql('cv_input_fr_lab_2',
                  con,
                  schema='dbo',
                  if_exists='replace',
                  index=False)
        send_all('Остались процедуры в базе')
        sql_execute("""
                    EXEC   [dbo].[Insert_Table_cv_input_fr_lab_2]
                    EXEC   [dbo].[cv_load_frlab]
                    """)
        send_all('Лаборатория успешно загружена')
        return 1

    send_all('Посмотрим на файлик лабораторных исследований')
    search = search_file('fr_lab')
    if search[0] and search[1]:
        send_all('Найден файл:\n' + search[2].split('\\')[-1])
        send_all('Сейчас мы его рассмотрим...')
        check = check_file(search[2], 'fr_lab')
        if check[0]:
            send_all('Неужели файл все-таки можно загрузить?')
            df = pd.read_csv(search[2],
                             header=check[3],
                             usecols=check[2],
                             na_filter=False,
                             dtype=str,
                             delimiter=';',
                             engine='python')
            fr_lab_to_sql(df)
        else:
            send_all('Не, плохой файл!')
            send_all(str(check))
            return 0
    else:
        if search[0]:
            send_all('Ну, это точно нужно перевести в csv!')
            file_csv = excel_to_csv(search[2])
            send_all('Результат:\n' + file_csv.split('\\')[-1])
            check = check_file(file_csv, 'fr_lab')
            if check[0]:
                send_all('Теперь можно и загрузить в память')
                df = pd.read_csv(file_csv,
                                 header=check[3],
                                 usecols=check[2],
                                 na_filter=False,
                                 dtype=str,
                                 delimiter=';',
                                 engine='python')
                fr_lab_to_sql(df)
            else:
                send_all('Файл не прошёл проверку!')
                send_all(check[1])
                return 0
        else:
            send_all('Не найден файл лаборатории')
        return 0
Beispiel #8
0
def load_fr_death():
    def fr_death_to_sql(df):
        send_all('Обрезаю слишком длинные строки')
        for column in df.columns:
            for i in range(len(df)):
                df.loc[i, column] = str(df.at[i, column])[:255]
        send_all('Убираю Nan из таблицы')
        for column in df.columns:
            df[column] = df[column].str.replace(r'nan', '')
        send_all('Отправляю в базу')
        df.to_sql('cv_input_fr_d_all_2',
                  con,
                  schema='dbo',
                  if_exists='replace',
                  index=False)
        send_all('Запускаю процедуры')
        sql_execute("""
                EXEC   [dbo].[Insert_Table_cv_input_fr_d_all_2]
                EXEC   [dbo].[cv_from_d_all_to_d_covid]
                EXEC   [dbo].[cv_Load_FedReg_d_All]
                EXEC   [dbo].[cv_Load_FedReg_d_covid]
                    """)
        send_all('Успешно загружено')
        return 1

    send_all('Пришло время спокойных')
    search = search_file('fr_death')
    if search[0] and search[1]:
        send_all('Найден файл:\n' + search[2].split('\\')[-1])
        send_all('Сейчас мы его рассмотрим...')
        check = check_file(search[2], 'fr_death')
        if check[0]:
            send_all('Похоже файл в порядке, попробую загрузить')
            df = pd.read_csv(search[2],
                             header=check[3],
                             usecols=check[2],
                             na_filter=False,
                             dtype=str,
                             delimiter=';',
                             engine='python')
            fr_death_to_sql(df)
        else:
            send_all('Что-то с файлом')
            send_all(str(check))
            return 0
    else:
        if search[0]:
            send_all('Давайте всё-таки работать с csv, конвертирую')
            file_csv = excel_to_csv(search[2])
            send_all('Результат:\n' + file_csv.split('\\')[-1])
            check = check_file(file_csv, 'fr_death')
            if check[0]:
                send_all('Теперь можно и загрузить в память')
                df = pd.read_csv(file_csv,
                                 header=check[3],
                                 usecols=check[2],
                                 na_filter=False,
                                 dtype=str,
                                 delimiter=';',
                                 engine='python')
                fr_death_to_sql(df)
            else:
                send_all('Файл не прошёл проверку!')
                send_all(check[1])
                return 0
        else:
            send_all('Не найден файл умерших')
        return 0
Beispiel #9
0
def load_fr():
    def fr_to_sql(df):
        df = df[df['Дата создания РЗ'] != '']
        del df['Ведомственная принадлежность']
        del df['Осложнение основного диагноза']
        send_all('Файл в памяти, количество строк: ' + str(len(df)))
        sql_execute('TRUNCATE TABLE [dbo].[cv_input_fr]')
        send_all('Очистил input_fr')
        df.to_sql('cv_input_fr',
                  con,
                  schema='dbo',
                  if_exists='append',
                  index=False)
        send_all('Загрузил input_fr, запускаю процедуру')
        sql_execute('EXEC [dbo].[cv_Load_FedReg]')
        send_all('Федеральный регистр успешно загружен')
        return 1

    send_all('Я проснулся и хочу грузить фр!')
    search = search_file('fr')
    if search[0] and search[1]:
        send_all('Вот нашёлся такой файлик:\n' + search[2].split('\\')[-1])
        send_all('Сейчас я его проверю...')
        check = check_file(search[2], 'fr')
        if check[0]:
            send_all('Файл прошёл проверку, начинаю грузить в память')
            df = pd.read_csv(search[2],
                             header=check[3],
                             usecols=check[2],
                             na_filter=False,
                             dtype=str,
                             delimiter=';',
                             engine='python')
            fr_to_sql(df)
        else:
            send_all('Файл не прошёл проверку!')
            send_all(check[1])
            return 0
    else:
        if search[0]:
            send_all('Нее... я не хочу работать с xlsx, щас конвертирую!')
            file_csv = excel_to_csv(search[2])
            send_all('Результат:\n' + file_csv.split('\\')[-1])
            check = check_file(file_csv, 'fr')
            if check[0]:
                send_all('Файл прошёл проверку, начинаю грузить в память')
                df = pd.read_csv(file_csv,
                                 header=check[3],
                                 usecols=check[2],
                                 na_filter=False,
                                 dtype=str,
                                 delimiter=';',
                                 engine='python')
                fr_to_sql(df)
            else:
                send_all('Файл не прошёл проверку!')
                send_all(check[1])
                return 0
        else:
            send_all('Но я не нашёл файла федерального регистра (((')
            return 0
    return 1
Beispiel #10
0
def load_report_vp_and_cv(a):
    def open_save(file):
        xcl = win32com.client.Dispatch("Excel.Application")
        wb = xcl.Workbooks.Open(file)
        xcl.DisplayAlerts = False
        wb.SaveAs(file)
        xcl.Quit()
        del xcl

    def load_file_mo(file):
        nameMO = pd.read_excel(file,
                               sheet_name='Титул',
                               header=3,
                               usecols='H',
                               nrows=1).iloc[0, 0]
        df = pd.read_excel(file,
                           sheet_name='Данные1',
                           header=6,
                           usecols='C:AH',
                           nrows=1)
        df = df.fillna(0)
        df['nameMO'] = nameMO
        os.replace(file, path + r'\\' + os.path.basename(file))
        return df

    def check_data_table(name):
        sql = f"""
            IF (EXISTS (SELECT * FROM {name})) 
                SELECT 1 ELSE SELECT 0 """
        return pd.read_sql(sql, conn).iat[0, 0]

    send_all('Продготовка к отчету Мониторинг ВП и COVID')
    files = glob.glob(get_dir('VP_CV') + r'\из_почты\[!~$]*.xls*')
    if len(files) == 0:
        raise my_except('Папка пустая!')
    path = get_dir('VP_CV') + r'\\' + datetime.datetime.now().strftime(
        "%Y%m%d")
    if os.path.exists(path):
        pass
    else:
        try:
            os.mkdir(path)
        except OSError:
            raise my_except('не смог создать папку')
    list_ = []
    excel = pd.DataFrame()
    for file in files:
        try:
            excel = load_file_mo(file)
        except:
            open_save(file)
            try:
                excel = load_file_mo(file)
            except:
                send_all('не обработался следующий файл \n' +
                         file.split('\\')[-1])
            else:
                list_.append(excel)
        else:
            list_.append(excel)
    if len(list_):
        df = pd.concat(list_)
    else:
        raise my_except('Не один файл не обработался')
    df = df.set_axis([
        'vp_03_Power_Count_Departments', 'vp_04_Power_Count_Allocated_All',
        'vp_05_Power_Count_Allocated', 'vp_06_Power_Count_Reanimation_All',
        'vp_07_Power_Count_Reanimation', 'vp_08_Hospital_All',
        'vp_09_Hospital_Day', 'vp_10_Hospital_Hard_All',
        'vp_11_Hospital_Hard_Reaniamation', 'vp_12_Hospital_Hard_Ivl',
        'vp_13_ReceivedAll', 'vp_14_ReceivedDay', 'vp_15_DischargedAll',
        'vp_16_DischargedDay', 'vp_17_DiedAll', 'vp_18_DiedDay',
        'cv_19_Power_Count_Departments', 'cv_20_Power_Count_Allocated_All',
        'cv_21_Power_Count_Allocated', 'cv_22_Power_Count_Reanimation_All',
        'cv_23_Power_Count_Reanimation', 'cv_24_Hospital_All',
        'cv_25_Hospital_Day', 'cv_26_Hospital_Hard_All',
        'cv_27_Hospital_Hard_Reaniamation', 'cv_28_Hospital_Hard_Ivl',
        'cv_29_ReceivedAll', 'cv_30_ReceivedDay', 'cv_31_DischargedAll',
        'cv_32_DischargedDay', 'cv_33_DiedAll', 'cv_34_DiedDay', 'nameMO'
    ],
                     axis=1,
                     inplace=False)
    try:
        df.to_sql('HistoryFileMO',
                  con,
                  schema='mon_vp',
                  index=False,
                  if_exists='append')
    except:
        raise my_except('не удалось загрузить в базу!')
    if check_data_table('mon_vp.v_DebtorsReport'):
        return short_report('SELECT * FROM mon_vp.v_DebtorsReport')
    else:
        #==========  тут мы грузим исходные данные в первую вкладку отчета
        df = pd.read_sql('SELECT * FROM mon_vp.v_GrandReport', conn)
        df1 = df.loc[df.typeMO == 1].sort_values(["numSort"]).drop(
            'typeMO', 1).drop('numSort', 1)
        df2 = df.loc[df.typeMO == 2].sort_values(["numSort"]).drop(
            'typeMO', 1).drop('numSort', 1)
        shablon = get_dir('help') + r'\СводОбщий_' + (
            datetime.datetime.now() +
            datetime.timedelta(days=1)).strftime("%d %m %Y") + '.xlsx'
        shutil.copyfile(
            get_dir('help') + r'\шаблон Мониторинг ВП.xlsx', shablon)

        wb = openpyxl.load_workbook(shablon)
        ws = wb['Данные']
        ws.cell(row=1,
                column=2,
                value=(datetime.datetime.now() +
                       datetime.timedelta(days=1)).strftime("%d.%m.%Y"))

        rows = dataframe_to_rows(df1, index=False, header=False)
        for r_idx, row in enumerate(rows, 9):
            for c_idx, value in enumerate(row, 1):
                ws.cell(row=r_idx, column=c_idx, value=value)

        rows = dataframe_to_rows(df2, index=False, header=False)
        for r_idx, row in enumerate(rows, 73):
            for c_idx, value in enumerate(row, 1):
                ws.cell(row=r_idx, column=c_idx, value=value)

        wb.save(shablon)

        #  ========== сейчас мы загрузим и сохраним данные по проверкам

        df = pd.read_sql("exec mon_vp.p_CheckMonitorVpAndCovid", conn)
        part_one = df.iloc[:, range(26)]
        part_two = df.iloc[:, [0] + list(range(26, 58, 1))]

        wb = openpyxl.load_workbook(shablon)
        ws = wb['Проверка']

        rows = dataframe_to_rows(part_one, index=False, header=False)
        for r_idx, row in enumerate(rows, 3):
            for c_idx, value in enumerate(row, 1):
                ws.cell(row=r_idx, column=c_idx, value=value)
        wb.save(shablon)

        wb = openpyxl.load_workbook(shablon)
        ws = wb['Разница']

        rows = dataframe_to_rows(part_two, index=False, header=False)
        for r_idx, row in enumerate(rows, 7):
            for c_idx, value in enumerate(row, 1):
                ws.cell(row=r_idx, column=c_idx, value=value)

        wb.save(shablon)
        try:
            shutil.copyfile(shablon,
                            get_dir('VP_CV') + '\\' + shablon.split('\\')[-1])
        except PermissionError:
            raise my_except('Закройте файлик! Не могу скопировать')
        return shablon
Beispiel #11
0
def load_UMSRS(a):
    def UMSRS_to_sql(df):
        df.to_sql('cv_input_umsrs_2',
                  con,
                  schema='dbo',
                  if_exists='append',
                  index=False)
        send_all('Данные загружены в input_umsrs_2, запускаю процедурки')
        sql_execute("""
                    EXEC   [dbo].[Insert_Table_cv_input_umsrs_2]
                    EXEC   [dbo].[cv_Load_UMSRS]
                    """)
        if check_table('umsrs'):
            send_all('Успешно выполнено!')
            return 1
        else:
            send_all('Какая-то проблема с загрузкой УМСРС')
            return 0

    send_all('А теперь будем грузить УМСРС')
    search = search_file('UMSRS')
    if search[0] and search[1]:
        send_all('файл уже сконвертирован:\n' + search[2].split('\\')[-1])
        send_all('Посмотрим что внутри...')
        check = check_file(search[2], 'UMSRS')
        if check[0]:
            send_all('Файл прошёл проверку, начинаю грузить в память')
            df = pd.read_csv(search[2],
                             header=check[3],
                             usecols=check[2],
                             names=check[2],
                             na_filter=False,
                             dtype=str,
                             delimiter=';',
                             engine='python')
            UMSRS_to_sql(df)
            return 1
        else:
            send_all('Файл не прошёл проверку!')
            send_all(check[1])
            return 0
    else:
        if search[0]:
            send_all('Нее... я не хочу работать с xlsx, щас конвертирую!')
            file_csv = excel_to_csv(search[2])
            send_all('Результат:\n' + file_csv.split('\\')[-1])
            check = check_file(file_csv, 'UMSRS')
            if check[0]:
                send_all('Файл прошёл проверку, начинаю грузить в память')
                df = pd.read_csv(file_csv,
                                 header=check[3],
                                 usecols=check[2],
                                 names=check[2],
                                 na_filter=False,
                                 dtype=str,
                                 delimiter=';',
                                 engine='python')
                UMSRS_to_sql(df)
                return 1
            else:
                send_all('Файл не прошёл проверку!')
                send_all(check[1])
                return 0
        else:
            send_all('Но я не нашёл файла УМСРС! (((')
            return 0
Beispiel #12
0
def load_fr(a):
    def fr_to_sql(df):
        df = df[df['Дата создания РЗ'] != '']
        del df['Ведомственная принадлежность']
        del df['Осложнение основного диагноза']
        # ==== Репорт о количестве выздоровевших =====
        report = pd.DataFrame()
        report.loc[0, 'date_rows'] = pd.to_datetime(
            df['Дата создания РЗ'], format='%d.%m.%Y').max().date()
        report.loc[0, 'value_name'] = 'Всего выздоровело от COVID'
        report.loc[0, 'value_count'] = len(
            df[df['Исход заболевания'].isin(['Выздоровление'])
               & df['Диагноз'].isin(['U07.1'])])
        report.to_sql('values',
                      con,
                      schema='robo',
                      index=False,
                      if_exists='append')
        # ============
        send_all('Файл в памяти, количество строк: ' + str(len(df)))
        sql_execute('TRUNCATE TABLE [dbo].[cv_input_fr]')
        send_all('Очистил input_fr')
        df.to_sql('cv_input_fr',
                  con,
                  schema='dbo',
                  if_exists='append',
                  index=False)
        send_all('Загрузил input_fr, запускаю процедуру')
        sql_execute('EXEC [dbo].[cv_Load_FedReg]')
        if check_table('fedreg'):
            send_all('Федеральный регистр успешно загружен')
            return 1
        else:
            send_all('Произошла какая-то проблема с загрузкой фр')
            return 0

    send_all('Я проснулся и хочу грузить фр!')
    search = search_file('fr')
    if search[0] and search[1]:
        send_all('Вот нашёлся такой файлик:\n' + search[2].split('\\')[-1])
        send_all('Сейчас я его проверю...')
        check = check_file(search[2], 'fr')
        if check[0]:
            send_all('Файл прошёл проверку, начинаю грузить в память')
            df = pd.read_csv(search[2],
                             header=check[3],
                             usecols=check[2],
                             na_filter=False,
                             dtype=str,
                             delimiter=';',
                             engine='python')
            print(df.head(3))
            fr_to_sql(df)
            return 1
        else:
            send_all('Файл не прошёл проверку!')
            send_all(check[1])
            return 0
    else:
        if search[0]:
            send_all('Нее... я не хочу работать с xlsx, щас конвертирую!')
            file_csv = excel_to_csv(search[2])
            send_all('Результат:\n' + file_csv.split('\\')[-1])
            check = check_file(file_csv, 'fr')
            if check[0]:
                send_all('Файл прошёл проверку, начинаю грузить в память')
                df = pd.read_csv(file_csv,
                                 header=check[3],
                                 usecols=check[2],
                                 na_filter=False,
                                 dtype=str,
                                 delimiter=';',
                                 engine='python')
                fr_to_sql(df)
                return 1
            else:
                send_all('Файл не прошёл проверку!')
                send_all(check[1])
                return 0
        else:
            send_all('Но я не нашёл файла федерального регистра (((')
            return 0
    return 1