PushToZhaoShang/README.md
houhuan 4a3e39d76d docs: 添加Postman配置文件和更新API文档
添加Postman环境配置和API集合文件,用于接口测试
更新README和API文档,补充部署说明和接口细节
2025-12-09 15:00:57 +08:00

130 lines
5.8 KiB
Markdown
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.

# 自动化营业额数据推送与展示系统
## 快速部署Docker
- 1准备环境变量不要提交真实口令到仓库
- 复制 `.env.example``.env` 并填写 `ADMIN_TOKEN`
- 2配置映射确保容器读取宿主机配置与数据
- `docker-compose.yml` 已映射:`./data:/app/data`、`./config.json:/app/config.json:ro`
- 3启动服务
```bash
docker-compose up -d --build
```
- 4访问入口
- 浏览器打开 `http://<服务器IP或域名>:57778`
- 5在线重载截止时间无需重启
```bash
curl -X POST "http://<服务器>:57778/api/admin/reload_cutoff" -H "X-Admin-Token: $ADMIN_TOKEN"
```
## 腾讯云环境优化
- 使用腾讯云 PyPI 镜像Dockerfile 已设置 `pip -i https://mirrors.cloud.tencent.com/pypi/simple`
- 设置时区为 `Asia/Shanghai`Dockerfile 安装并配置 `tzdata`
- 数据持久化:`docker-compose.yml` 将宿主机 `./data` 映射为容器 `/app/data`,数据库路径 `sqlite:///data/data.db`
## 功能概览
- 每日截止时间(本地时区,支持分钟级,如 `13:18`)自动生成并定版当日营业额
- 修正接口:支持按日期修正金额,前端即时一致更新;修正过程不直接在前端展示
- 审计与日志:所有生成/修正写入审计表,兼容追加到 `app.log`
- 看板:今日/昨日/前日、本周(周一~昨日)、上周(周一~周日)、本月
- 折线图:最近 7 天、本月、上月、最近 90 天;支持缩放、导出图片/CSV
- 飞书推送:卡片 → 帖子 → 文本三段式兼容;支持签名与 IP 白名单
## 项目结构
```
.
├── backend/ # Flask API + APScheduler
├── frontend/ # 单页 HTMLTailwind+Chart.js
├── data/ # SQLite 数据卷(容器映射 /app/data
├── instance/ # 历史/本地副本(当前不作为权威数据源)
├── docs/
│ └── 自动化营业额系统/
│ ├── API.md # 全量接口文档
│ ├── DESIGN.md # 设计说明
│ └── PRD.md # 需求说明
├── scripts/
│ ├── deploy.ps1 # Windows 一键部署/重载/试推
│ └── deploy.sh # Linux 一键部署/重载/试推
├── Dockerfile # 生产镜像(已适配腾讯云)
├── docker-compose.yml # 一键部署(映射 data 与 config
├── .env.example # 环境变量示例(不要提交真实 .env
├── README.md
└── app.log # 运行日志(含飞书返回体片段)
```
## 环境变量
- `DATABASE_URL`:数据库连接字符串(默认 `sqlite:///data/data.db`
- `ADMIN_TOKEN`:管理修正口令;修正时在请求头加入 `X-Admin-Token`
- `TZ`:容器时区(默认 `Asia/Shanghai`
- `PORT`:应用监听端口(默认 `5000`,示例已改为 `57778`
- `AUTO_IMPORT_ON_START`:启动时自动导入 `data/import.csv`DB 为空时)
## 修正接口示例
```bash
curl -X PUT http://localhost:5000/api/admin/turnover \
-H "Content-Type: application/json" \
-H "X-Admin-Token: $ADMIN_TOKEN" \
-d '{"date":"2025-12-06","amount":3123.45,"reason":"调整入账"}'
```
## 在线重载截止时间(无需重启)
```bash
curl -X POST "http://localhost:57778/api/admin/reload_cutoff" -H "X-Admin-Token: $ADMIN_TOKEN"
```
## 读取运行日志(含推送返回体片段)
```bash
curl "http://localhost:57778/api/admin/logs?lines=200" -H "X-Admin-Token: $ADMIN_TOKEN"
```
## 数据预置与迁移
- 首次启动自动导入(开启 `AUTO_IMPORT_ON_START=1` 且 DB为空
- 如果存在 `/app/data/import.csv`(宿主机 `./data/import.csv`),自动导入该文件
- CSV格式
```
date,amount
2025-12-01,12345.67
2025-12-02,11890.12
```
- 手动导入接口:
```bash
curl -X POST http://<服务器>:57778/api/admin/import \
-H "X-Admin-Token: $ADMIN_TOKEN" -H "Content-Type: text/csv" \
--data-binary @revenue.csv
```
## 本地运行(默认数据库路径)
- 默认数据库:`sqlite:///data/data.db`(项目根目录下的 `data/data.db`
- 启动:
```powershell
$env:PORT=57778; $env:ADMIN_TOKEN="<你的口令>"; python backend/app.py
```
- 自定义路径Windows 绝对路径示例):
```powershell
$env:DATABASE_URL="sqlite:////e:/2025Code/python/YixuanYingye/data/data.db"; python backend/app.py
```
## 飞书机器人配置
- 使用飞书自定义机器人 Webhook`https://open.feishu.cn/open-apis/bot/v2/hook/<ID>`
- 如开启签名校验,在 `config.json` 设置 `feishu_secret`;未开启则留空
- 如启用 IP 白名单,需在机器人配置中加入服务器出口公网 IP否则会返回 `{"code":19022,"msg":"Ip Not Allowed"}`
## API 文档
- 详见 `docs/自动化营业额系统/API.md`
## 归档建议
- 保留以下文件以便复现与审计:
- `docs/自动化营业额系统/*`、`Dockerfile`、`docker-compose.yml`、`config.json`、`app.log`
- 生产数据卷:`data/data.db`(或导出的 CSV
- 如迁移外部数据库,建议取消数据卷映射并设置 `DATABASE_URL`PostgreSQL/MySQL
## 环境优化(最优解)
- 基础镜像切换为 `python:3.11-alpine`,构建更快、体积更小
- 依赖安装走腾讯云 PyPI 镜像:`PIP_INDEX_URL=https://mirrors.cloud.tencent.com/pypi/simple`
- 自动数据导入:环境变量 `AUTO_IMPORT_ON_START=1`,启动时按顺序导入
- `/app/data/import.csv`(宿主机 `./data/import.csv`
## 生产建议
- 建议使用反向代理Nginx暴露 `5000` 端口,并开启 gzip
- 建议通过 `docker-compose``restart: unless-stopped` 保持服务稳定
- 如需外部数据库,设置 `DATABASE_URL`(例如 PostgreSQL并移除数据卷映射