细节修改
This commit is contained in:
8
app.py
8
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():
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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'):
|
||||
|
||||
@@ -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)
|
||||
|
||||
# 创建工作簿
|
||||
|
||||
@@ -176,7 +176,11 @@
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h2 id="modal-title">创建配置</h2>
|
||||
<button class="close-btn" onclick="closeModal()">×</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()">×</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<input type="hidden" id="config-id">
|
||||
|
||||
Reference in New Issue
Block a user