# 订单日报系统 - Python Flask版本 一个基于Python Flask的订单日报自动生成系统,用于公交等企业的订单报表自动生成。 ## 功能特性 - ✅ **定时生成**:每天早上8:01自动生成前一天的日报 - ✅ **配置管理**:支持创建、编辑、删除、启用/禁用、排序 - ✅ **日报生成**:按配置+时间范围生成 - ✅ **自定义字段**:100+字段可选,中文显示 - ✅ **求和功能**:支持多字段求和 - ✅ **按企业/用户拆分**:灵活选择拆分方式 - ✅ **预设时间**:昨天、最近3天、最近7天 - ✅ **自定义时间**:任意时间范围 - ✅ **Excel导出**:格式化Excel文件 - ✅ **历史记录**:查看、下载、批量下载 ## 技术栈 - **后端**:Python 3.8+ / Flask 3.0 - **数据库**:MySQL / Apache Doris(PyMySQL驱动) - **Excel**:openpyxl - **定时任务**:APScheduler - **前端**:原生HTML + CSS + JavaScript ## 项目结构 ``` . ├── app.py # Flask主应用 ├── requirements.txt # Python依赖 ├── lib/ # 业务逻辑 │ ├── __init__.py │ ├── db.py # 数据库连接 │ ├── field_mapping.py # 字段映射 │ └── report_generator.py # 日报生成 ├── templates/ # HTML模板 │ └── index.html # 主页面 ├── public/reports/ # Excel文件存储 └── README.md # 本文件 ``` ## 快速开始 ### 1. 安装Python依赖 ```bash pip install -r requirements.txt ``` ### 2. 配置数据库 编辑 `lib/db.py`,修改数据库连接信息: ```python DB_CONFIG = { 'host': 'haoslm2.xicp.net', 'port': 10216, 'user': 'root', 'password': 'DsideaL147258369', 'database': 'yltcharge', 'charset': 'utf8mb4', 'cursorclass': pymysql.cursors.DictCursor } ``` ### 3. 启动服务 ```bash python app.py ``` 服务将在 `http://localhost:5000` 启动。 ### 4. 初始化数据库 首次运行需要初始化数据库表: 访问:http://localhost:5000/api/init-tables 或运行: ```bash curl -X POST http://localhost:5000/api/init-tables ``` ### 5. 使用系统 1. 打开浏览器访问:http://localhost:5000 2. 切换到"配置管理"标签,创建配置 3. 切换到"日报生成"标签,生成日报 4. 切换到"历史记录"标签,查看和下载日报 ## API接口 ### 配置管理 - `GET /api/config` - 获取所有配置 - `POST /api/config` - 创建配置 - `PUT /api/config/` - 更新配置 - `DELETE /api/config/` - 删除配置 - `POST /api/config//toggle` - 启用/禁用配置 - `POST /api/config/reorder` - 重新排序 ### 日报生成 - `POST /api/report/generate` - 生成日报 - `GET /api/report/history` - 获取历史记录 - `GET /api/download` - 下载Excel文件 ### 数据库 - `POST /api/init-tables` - 初始化数据库表 ## 数据库表结构 ### t_daily_report_config(配置表) - `id` - 配置ID - `config_name` - 配置名称 - `split_type` - 拆分方式(company_id/user_id) - `split_value` - 拆分值 - `split_name` - 拆分显示名称 - `selected_fields` - 选择的字段(JSON) - `sum_fields` - 求和字段(JSON) - `is_active` - 是否启用 - `sort_order` - 排序顺序 - `create_time` - 创建时间 - `update_time` - 更新时间 ### t_daily_report_history(历史表) - `id` - 记录ID - `report_date` - 报表日期 - `start_time` - 开始时间 - `end_time` - 结束时间 - `split_type` - 拆分方式 - `split_value` - 拆分值 - `split_name` - 拆分显示名称 - `config_id` - 配置ID - `config_name` - 配置名称 - `total_orders` - 订单总数 - `total_amount` - 总金额 - `sum_results` - 求和结果(JSON) - `file_path` - 文件路径 - `status` - 状态(0=失败,1=成功) - `error_msg` - 错误信息 - `create_time` - 创建时间 ## 定时任务 系统内置定时任务,每天8:01(北京时间)自动生成日报: - 为所有启用的配置生成日报 - 时间范围:前一天8:00到当天8:00 - 生成的Excel文件保存在 `public/reports/` 目录 ## Windows运行 ### 启动服务 ```cmd python app.py ``` ### 常见问题 #### 端口被占用 ```cmd # 查看占用5000端口的进程 netstat -ano | findstr :5000 # 结束进程 taskkill /PID <进程ID> /F ``` #### 依赖安装失败 ```cmd # 使用国内镜像 pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple ``` ## Linux/Mac运行 ### 启动服务 ```bash python3 app.py ``` ### 后台运行 ```bash nohup python3 app.py > app.log 2>&1 & ``` ## 注意事项 1. **数据库连接**:确保数据库地址、端口、用户名、密码正确 2. **字段映射**:使用实际数据库中的字段名,参考 `lib/field_mapping.py` 3. **文件权限**:确保 `public/reports/` 目录有写入权限 4. **定时任务**:保持服务持续运行,定时任务才会执行 ## 许可证 MIT License