细节修改

This commit is contained in:
2026-07-20 16:42:56 +08:00
parent 70ae08fa50
commit 404450b779
6 changed files with 43 additions and 19 deletions

8
app.py
View File

@@ -4,7 +4,7 @@ Flask 主应用
""" """
import os import os
from datetime import datetime from datetime import datetime
from flask import Flask, render_template from flask import Flask, render_template, Response
from flask_cors import CORS from flask_cors import CORS
from apscheduler.schedulers.background import BackgroundScheduler from apscheduler.schedulers.background import BackgroundScheduler
import pytz import pytz
@@ -43,6 +43,12 @@ def index():
return render_template('index.html') return render_template('index.html')
@app.route('/favicon.ico')
def favicon():
"""网站图标返回空响应避免404"""
return Response(status=204)
# ==================== 定时任务 ==================== # ==================== 定时任务 ====================
def scheduled_job(): def scheduled_job():

View File

@@ -28,7 +28,7 @@ def get_connection():
conn = pymysql.connect(**DB_CONFIG) conn = pymysql.connect(**DB_CONFIG)
yield conn yield conn
except pymysql.Error as e: except pymysql.Error as e:
log_error(f'数据库连接失败: {e}', 'db') log_error(f'数据库连接失败: {e}', 'db', exc_info=True)
raise raise
finally: finally:
try: try:
@@ -46,7 +46,7 @@ def execute_query(sql, params=None):
result = cursor.fetchall() result = cursor.fetchall()
return result return result
except Exception as e: 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 raise
@@ -58,7 +58,7 @@ def execute_update(sql, params=None):
affected = cursor.execute(sql, params) affected = cursor.execute(sql, params)
return cursor.rowcount return cursor.rowcount
except Exception as e: 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 raise
@@ -71,5 +71,5 @@ def execute_insert(sql, params=None):
last_id = cursor.lastrowid last_id = cursor.lastrowid
return last_id return last_id
except Exception as e: 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 raise

View File

@@ -34,6 +34,11 @@ def _add_column_if_not_exists(table_name, column_def_sql, column_name):
return False return False
def _set_table_comment(table_name, comment):
"""设置表备注Doris暂不支持通过SQL修改表注释预留函数"""
pass
def init_database_tables(): def init_database_tables():
"""初始化所有数据库表(应用启动时自动调用)""" """初始化所有数据库表(应用启动时自动调用)"""
try: try:
@@ -64,6 +69,7 @@ def init_database_tables():
PROPERTIES("replication_num" = "1") PROPERTIES("replication_num" = "1")
""" """
execute_update(create_config_table) execute_update(create_config_table)
_set_table_comment('t_daily_report_config', '日报配置表')
log_info("[数据库] t_daily_report_config 表已就绪", 'db_init') log_info("[数据库] t_daily_report_config 表已就绪", 'db_init')
# 创建历史表 # 创建历史表
@@ -90,6 +96,7 @@ def init_database_tables():
PROPERTIES("replication_num" = "1") PROPERTIES("replication_num" = "1")
""" """
execute_update(create_history_table) execute_update(create_history_table)
_set_table_comment('t_daily_report_history', '日报生成历史记录表')
log_info("[数据库] t_daily_report_history 表已就绪", 'db_init') log_info("[数据库] t_daily_report_history 表已就绪", 'db_init')
# 为已存在的表添加 config_name 字段(如果不存在) # 为已存在的表添加 config_name 字段(如果不存在)
@@ -124,6 +131,7 @@ def init_database_tables():
PROPERTIES("replication_num" = "1") PROPERTIES("replication_num" = "1")
""" """
execute_update(create_sum_data_table) execute_update(create_sum_data_table)
_set_table_comment('t_daily_report_sum_data', '日报求和数据采集表')
log_info("[数据库] t_daily_report_sum_data 表已就绪", 'db_init') log_info("[数据库] t_daily_report_sum_data 表已就绪", 'db_init')
# 给配置表增加 show_monthly_total 字段 # 给配置表增加 show_monthly_total 字段
@@ -176,5 +184,5 @@ def init_database_tables():
log_info("[数据库] 初始化完成", 'db_init') log_info("[数据库] 初始化完成", 'db_init')
return True return True
except Exception as e: except Exception as e:
log_error(f"[数据库] 初始化失败: {e}", 'db_init') log_error(f"[数据库] 初始化失败: {e}", 'db_init', exc_info=True)
return False return False

View File

@@ -1,4 +1,5 @@
import os import os
import sys
import logging import logging
from logging.handlers import RotatingFileHandler from logging.handlers import RotatingFileHandler
from datetime import datetime from datetime import datetime
@@ -68,11 +69,21 @@ def log_info(message, module='app'):
get_logger(module).info(message) get_logger(module).info(message)
def log_error(message, module='app'): def log_error(message, module='app', exc_info=True):
"""记录错误日志""" """记录错误日志
get_logger(module).error(message)
import traceback Args:
get_logger(module).error(traceback.format_exc()) 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'): def log_warning(message, module='app'):

View File

@@ -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') reports_dir = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'public', 'reports')
os.makedirs(reports_dir, exist_ok=True) os.makedirs(reports_dir, exist_ok=True)
# 生成文件名 - 格式:序号_配置名称_几月几日消费记录.xlsx # 生成文件名 - 格式配置名称_几月几日消费记录.xlsx
# 从 start_time 提取日期(报表数据对应的是开始时间那天的数据) # 从 start_time 提取日期(报表数据对应的是开始时间那天的数据)
try: try:
start_dt = datetime.strptime(start_time, '%Y-%m-%d %H:%M:%S') 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 '' supplement_suffix = '_有补单' if has_supplement else ''
# 顺序号前缀(两位数字,不足补零) filename = f'{config_name}_{date_str}消费记录{supplement_suffix}.xlsx'
sort_prefix = ''
if sort_order:
sort_prefix = f'{sort_order:02d}_'
filename = f'{sort_prefix}{config_name}_{date_str}消费记录{supplement_suffix}.xlsx'
file_path = os.path.join(reports_dir, filename) file_path = os.path.join(reports_dir, filename)
# 创建工作簿 # 创建工作簿

View File

@@ -176,7 +176,11 @@
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h2 id="modal-title">创建配置</h2> <h2 id="modal-title">创建配置</h2>
<button class="close-btn" onclick="closeModal()">&times;</button> <div style="display: flex; align-items: center; gap: 10px;">
<button class="btn btn-sm" onclick="closeModal()">取消</button>
<button class="btn btn-sm btn-primary" onclick="saveConfig()">保存</button>
<button class="close-btn" onclick="closeModal()">&times;</button>
</div>
</div> </div>
<div class="modal-body"> <div class="modal-body">
<input type="hidden" id="config-id"> <input type="hidden" id="config-id">