- 后端:将 app.py 拆分为 lib/api/ 目录下的多个蓝图模块 - config_api.py: 配置管理 API - entity_api.py: 实体管理 API - field_api.py: 字段列表 API - report_api.py: 日报生成和历史记录 API - init_api.py: 数据库初始化 API - download_api.py: 文件下载 API - 前端:将 index.html 拆分为多个文件 - static/css/style.css: CSS 样式 - static/js/common.js: 通用工具函数 - static/js/config.js: 配置管理 - static/js/entity.js: 实体管理 - static/js/report.js: 日报生成 - static/js/history.js: 历史记录 - 更新 app.py 使用蓝图注册 API - 创建 AGENTS.md 项目文档 Coze-Commit-Type: user Coze-User-ID: 3722323274763196 Coze-Conversation-ID: 9894087
85 lines
2.5 KiB
Python
85 lines
2.5 KiB
Python
"""
|
||
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
|
||
|
||
# 创建 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)
|
||
|
||
|
||
# ==================== 页面路由 ====================
|
||
|
||
@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)
|