Files
ylt_diy/app.py

93 lines
2.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
Flask 主应用
订单日报系统
"""
import os
from datetime import datetime
from flask import Flask, render_template
from flask_cors import CORS
from apscheduler.schedulers.background import BackgroundScheduler
import pytz
from lib.db import execute_query
from lib.report_generator import generate_daily_report
from lib.api import register_blueprints
from lib.db_init import init_database_tables
# 创建 Flask 应用
app = Flask(__name__,
template_folder='templates',
static_folder='public')
CORS(app)
# 确保 public/reports 目录存在
os.makedirs(os.path.join('public', 'reports'), exist_ok=True)
# 注册 API 蓝图
register_blueprints(app)
# 应用启动时自动初始化数据库表
print('正在初始化数据库表...')
if init_database_tables():
print('数据库表初始化成功')
else:
print('数据库表初始化失败,请检查数据库连接')
# ==================== 页面路由 ====================
@app.route('/')
def index():
"""主页"""
return render_template('index.html')
# ==================== 定时任务 ====================
def scheduled_job():
"""定时任务:每天 8:01 自动生成日报"""
print(f'[{datetime.now()}] 开始执行定时任务...')
try:
# 获取所有启用的配置
configs = execute_query(
'SELECT id, config_name FROM t_daily_report_config WHERE is_active = 1'
)
if not configs:
print('没有启用的配置,跳过生成')
return
print(f'找到 {len(configs)} 个启用的配置')
# 为每个配置生成日报
for config in configs:
print(f'正在生成:{config["config_name"]}')
result = generate_daily_report(config['id'])
if result['success']:
print(f' ✓ 成功:{result["total_orders"]} 条订单,金额:{result["total_amount"]}')
else:
print(f' ✗ 失败:{result["message"]}')
print('定时任务执行完成')
except Exception as e:
print(f'定时任务执行失败:{e}')
# 启动定时任务
scheduler = BackgroundScheduler(timezone='Asia/Shanghai')
scheduler.add_job(scheduled_job, 'cron', hour=8, minute=1)
scheduler.start()
print('定时任务已启动:每天 08:01 执行')
# ==================== 启动应用 ====================
if __name__ == '__main__':
# 支持沙箱环境和本地环境
port = int(os.environ.get('DEPLOY_RUN_PORT', os.environ.get('PORT', 5000)))
print(f'启动服务器http://localhost:{port}')
print(f'数据库:{os.environ.get("DB_HOST", "haoslm2.xicp.net")}:{os.environ.get("DB_PORT", "10216")}')
app.run(host='0.0.0.0', port=port, debug=True)