# 订单日报系统 - 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/<id>` - 更新配置
- `DELETE /api/config/<id>` - 删除配置
- `POST /api/config/<id>/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
