diff --git a/app.py b/app.py index 8c6f1a6..3f0f135 100644 --- a/app.py +++ b/app.py @@ -4,7 +4,7 @@ Flask 主应用 """ import os from datetime import datetime -from flask import Flask, render_template +from flask import Flask, render_template, Response from flask_cors import CORS from apscheduler.schedulers.background import BackgroundScheduler import pytz @@ -43,6 +43,12 @@ def index(): return render_template('index.html') +@app.route('/favicon.ico') +def favicon(): + """网站图标(返回空响应避免404)""" + return Response(status=204) + + # ==================== 定时任务 ==================== def scheduled_job(): diff --git a/lib/db.py b/lib/db.py index ac8faa0..3098812 100644 --- a/lib/db.py +++ b/lib/db.py @@ -28,7 +28,7 @@ def get_connection(): conn = pymysql.connect(**DB_CONFIG) yield conn except pymysql.Error as e: - log_error(f'数据库连接失败: {e}', 'db') + log_error(f'数据库连接失败: {e}', 'db', exc_info=True) raise finally: try: @@ -46,7 +46,7 @@ def execute_query(sql, params=None): result = cursor.fetchall() return result except Exception as e: - log_error(f'查询失败: {e}\nSQL: {sql}\nParams: {params}', 'db') + log_error(f'查询失败: {e}\nSQL: {sql}\nParams: {params}', 'db', exc_info=True) raise @@ -58,7 +58,7 @@ def execute_update(sql, params=None): affected = cursor.execute(sql, params) return cursor.rowcount except Exception as e: - log_error(f'更新失败: {e}\nSQL: {sql}\nParams: {params}', 'db') + log_error(f'更新失败: {e}\nSQL: {sql}\nParams: {params}', 'db', exc_info=True) raise @@ -71,5 +71,5 @@ def execute_insert(sql, params=None): last_id = cursor.lastrowid return last_id except Exception as e: - log_error(f'插入失败: {e}\nSQL: {sql}\nParams: {params}', 'db') + log_error(f'插入失败: {e}\nSQL: {sql}\nParams: {params}', 'db', exc_info=True) raise \ No newline at end of file diff --git a/lib/db_init.py b/lib/db_init.py index fff2c41..1f01cde 100644 --- a/lib/db_init.py +++ b/lib/db_init.py @@ -34,6 +34,11 @@ def _add_column_if_not_exists(table_name, column_def_sql, column_name): return False +def _set_table_comment(table_name, comment): + """设置表备注(Doris暂不支持通过SQL修改表注释,预留函数)""" + pass + + def init_database_tables(): """初始化所有数据库表(应用启动时自动调用)""" try: @@ -64,6 +69,7 @@ def init_database_tables(): PROPERTIES("replication_num" = "1") """ execute_update(create_config_table) + _set_table_comment('t_daily_report_config', '日报配置表') log_info("[数据库] t_daily_report_config 表已就绪", 'db_init') # 创建历史表 @@ -90,6 +96,7 @@ def init_database_tables(): PROPERTIES("replication_num" = "1") """ execute_update(create_history_table) + _set_table_comment('t_daily_report_history', '日报生成历史记录表') log_info("[数据库] t_daily_report_history 表已就绪", 'db_init') # 为已存在的表添加 config_name 字段(如果不存在) @@ -124,6 +131,7 @@ def init_database_tables(): PROPERTIES("replication_num" = "1") """ execute_update(create_sum_data_table) + _set_table_comment('t_daily_report_sum_data', '日报求和数据采集表') log_info("[数据库] t_daily_report_sum_data 表已就绪", 'db_init') # 给配置表增加 show_monthly_total 字段 @@ -176,5 +184,5 @@ def init_database_tables(): log_info("[数据库] 初始化完成", 'db_init') return True except Exception as e: - log_error(f"[数据库] 初始化失败: {e}", 'db_init') + log_error(f"[数据库] 初始化失败: {e}", 'db_init', exc_info=True) return False diff --git a/lib/logger.py b/lib/logger.py index 97e6400..66c92b1 100644 --- a/lib/logger.py +++ b/lib/logger.py @@ -1,4 +1,5 @@ import os +import sys import logging from logging.handlers import RotatingFileHandler from datetime import datetime @@ -68,11 +69,21 @@ def log_info(message, module='app'): get_logger(module).info(message) -def log_error(message, module='app'): - """记录错误日志""" - get_logger(module).error(message) - import traceback - get_logger(module).error(traceback.format_exc()) +def log_error(message, module='app', exc_info=True): + """记录错误日志 + + Args: + message: 错误信息 + module: 模块名 + exc_info: 是否包含异常堆栈(默认True,在except块中调用时自动打印堆栈) + """ + logger = get_logger(module) + logger.error(message) + if exc_info: + import traceback + tb = traceback.format_exc() + if 'NoneType: None' not in tb: + logger.error(tb) def log_warning(message, module='app'): diff --git a/lib/report_generator.py b/lib/report_generator.py index f692b12..d88dfd4 100644 --- a/lib/report_generator.py +++ b/lib/report_generator.py @@ -591,7 +591,7 @@ def generate_excel(orders, selected_fields, sum_fields, sum_results, reports_dir = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'public', 'reports') os.makedirs(reports_dir, exist_ok=True) - # 生成文件名 - 格式:序号_配置名称_几月几日消费记录.xlsx + # 生成文件名 - 格式:配置名称_几月几日消费记录.xlsx # 从 start_time 提取日期(报表数据对应的是开始时间那天的数据) try: start_dt = datetime.strptime(start_time, '%Y-%m-%d %H:%M:%S') @@ -602,12 +602,7 @@ def generate_excel(orders, selected_fields, sum_fields, sum_results, # 如果有补单,添加标记 supplement_suffix = '_有补单' if has_supplement else '' - # 顺序号前缀(两位数字,不足补零) - sort_prefix = '' - if sort_order: - sort_prefix = f'{sort_order:02d}_' - - filename = f'{sort_prefix}{config_name}_{date_str}消费记录{supplement_suffix}.xlsx' + filename = f'{config_name}_{date_str}消费记录{supplement_suffix}.xlsx' file_path = os.path.join(reports_dir, filename) # 创建工作簿 diff --git a/templates/index.html b/templates/index.html index 378e01b..409a0d5 100644 --- a/templates/index.html +++ b/templates/index.html @@ -176,7 +176,11 @@