# from datetime import date # from sqlalchemy.orm import Session # from openpyxl import load_workbook # from pathlib import Path # # import pandas as pd # import os # import logging # # from app.entity.database.session import get_db # from app.entity.models.PowerOutageStats import PowerOutageStats # # # 获取日志记录器 # logger = logging.getLogger(__name__) # # # 三份累计表 # def accumulated_statistics(start_time, end_time, save_path=None): # # try: # logger.info('对数据库的查询结果进行处理,完成三个累计表数据的组装') # # db: Session = next(get_db()) # # 查询某个时间段的数据 # results = db.query(PowerOutageStats.province_company,PowerOutageStats.outage_users,PowerOutageStats.short_outage_users, # PowerOutageStats.repair_count,PowerOutageStats.complaint_count,PowerOutageStats.public_opinion_count, # PowerOutageStats.major_event_count, PowerOutageStats.statistics_time) # # # Excel 模板路径 # # 获取当前文件夹路径 # current_path = Path(__file__).parent # templates_path = str(os.path.join(current_path.parent, 'templates')).replace('\\', '/') # # # 加载 Excel 模板 # book = load_workbook(f'{templates_path}/累计数据模板.xlsx') # # # 选择要写入的 Sheet 页 # sheet_name = 'Sheet1' # 替换为你的 Sheet 页名称 # sheet = book[sheet_name] # # # 查询结果用pandas进行处理 # if results: # # # 将数据转成pandas数据结构 # df = pd.read_sql(results.statement, results.session.bind) # # 插入序号列作为第一列 # df.insert(0, 'num', df.index + 1) # # # 组成表1数据 # df_temp = df[(df['statistics_time'] >= start_time) & (df['statistics_time'] <= end_time)] # df_table1 = df_temp[['statistics_time', 'outage_users', 'complaint_count','public_opinion_count']] # df_table1 = df_table1.groupby('statistics_time').sum() # df_table1 = df_table1.reset_index() # # # 表1写入excel的位置 # start_row1 = 3 # start_col1 = 1 # print(df_table1) # write_to_excel(df_table1,sheet,start_row1,start_col1) # # # # 组成表2数据 # df_table2 = df_temp[['statistics_time', 'outage_users', 'short_outage_users', 'repair_count','complaint_count','public_opinion_count']] # df_table2 = df_table2.groupby('statistics_time').sum() # df_table2 = df_table2.reset_index() # # # 表2写入excel的位置 # start_row2 = 3 # start_col2 = 6 # print(df_table2) # write_to_excel(df_table2,sheet,start_row2,start_col2) # # # 表3写入excel的位置 # start_row3 = 3 # start_col3 = 13 # df_table3 = df.drop('statistics_time', axis=1) # write_to_excel(df_table3,sheet,start_row3,start_col3) # # # 最终结果生成 # book.save(f'{save_path}/累积统计表.xlsx') # except Exception as e: # logger.error(f'写入excel失败: {e}') # raise e # # #对三张表进行组装 # def write_to_excel(df, sheet, start_row, start_col): # # try: # logger.info('开始写入excel') # # 将 DataFrame 写入指定位置 # for i, row in enumerate(df.itertuples(index=False), start=start_row): # for j, value in enumerate(row, start=start_col): # sheet.cell(row=i, column=j, value=value) # except Exception as e: # logger.error(f'写入excel失败: {e}') # raise e # # # if __name__ == '__main__': # # # start_time = date(2025,3,9) # end_time = date(2025,3,10) # print(end_time) # accumulated_statistics(start_time, end_time) # #