Files
billai/README.md
cheliangzhao 8a9de1b328 fix: 修复账单时间显示为UTC时区问题,改为本地时间
- 新增 LocalTime 自定义类型,JSON序列化输出本地时间格式
- 修改 CleanedBill.Time 字段类型为 LocalTime
- 更新 parseTime 函数返回 LocalTime 类型
- 前端添加 formatDateTime 工具函数(兼容处理)
- 版本号更新至 1.0.2
2026-01-11 21:40:27 +08:00

304 lines
8.5 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.
# 💰 BillAI - 智能账单分析系统
一个基于微服务架构的个人账单分析工具,支持微信和支付宝账单的自动解析、智能分类和可视化分析。
![版本](https://img.shields.io/badge/版本-1.0.2-green)
![架构](https://img.shields.io/badge/架构-微服务-blue)
![Go](https://img.shields.io/badge/Go-1.21-00ADD8)
![Python](https://img.shields.io/badge/Python-3.12-3776AB)
![Svelte](https://img.shields.io/badge/SvelteKit-5-FF3E00)
![MongoDB](https://img.shields.io/badge/MongoDB-8.0-47A248)
![Docker](https://img.shields.io/badge/Docker-Compose-2496ED)
## ✨ 功能特性
- 📊 **账单分析** - 自动解析微信/支付宝账单,生成可视化报表
- 🏷️ **智能分类** - 基于关键词匹配的交易分类推断
- 📈 **趋势图表** - 日/月消费趋势、分类排行、收支对比
- 🔍 **复核修正** - 对不确定的分类进行人工复核
- 🐳 **一键部署** - Docker Compose 快速启动全部服务
## 🏗️ 系统架构
```mermaid
graph TB
subgraph 用户层
User[👤 用户]
end
subgraph 前端服务
Web[🌐 Web 前端<br/>SvelteKit :3000]
end
subgraph 后端服务
Server[⚙️ Go 后端<br/>Gin :8080]
Analyzer[🐍 Python 分析服务<br/>FastAPI :8001]
end
subgraph 数据层
MongoDB[(🍃 MongoDB<br/>:27017)]
MongoExpress[📊 Mongo Express<br/>:8083]
end
User -->|访问| Web
Web -->|HTTP API| Server
Server -->|HTTP 调用| Analyzer
Server -->|读写数据| MongoDB
MongoExpress -->|管理| MongoDB
style Web fill:#ff3e00,color:#fff
style Server fill:#00ADD8,color:#fff
style Analyzer fill:#3776AB,color:#fff
style MongoDB fill:#47A248,color:#fff
```
### 数据流
```mermaid
sequenceDiagram
participant U as 👤 用户
participant W as 🌐 Web
participant S as ⚙️ Server
participant A as 🐍 Analyzer
participant D as 🍃 MongoDB
rect rgb(240, 248, 255)
Note over U,D: 上传账单流程
U->>W: 上传账单文件
W->>S: POST /api/upload
S->>A: POST /clean (清洗账单)
A-->>S: 清洗结果 + 分类
S->>D: 存储账单数据
D-->>S: 保存成功
S-->>W: 返回分析结果
W-->>U: 显示分析报表
end
rect rgb(255, 248, 240)
Note over U,D: 复核修正流程
U->>W: 查看待复核记录
W->>S: GET /api/review
S->>D: 查询不确定分类
D-->>S: 返回记录列表
S-->>W: 待复核数据
W-->>U: 显示复核界面
U->>W: 修正分类
W->>S: 更新分类
S->>D: 更新记录
end
```
## 📁 项目结构
```
BillAI/
├── web/ # 前端 (SvelteKit + TailwindCSS)
│ ├── src/
│ │ ├── routes/ # 页面路由
│ │ │ ├── login/ # 🔐 登录页面
│ │ │ ├── analysis/ # 📊 账单分析页
│ │ │ ├── bills/ # 📋 账单列表页
│ │ │ └── review/ # ✅ 复核页面
│ │ └── lib/
│ │ ├── components/ # UI 组件
│ │ ├── stores/ # 状态管理
│ │ └── services/ # API 服务
│ └── Dockerfile
├── server/ # 后端 (Go + Gin)
│ ├── adapter/ # 适配器层
│ │ ├── http/ # HTTP 客户端
│ │ └── python/ # 子进程调用
│ ├── handler/ # HTTP 处理器
│ ├── service/ # 业务逻辑
│ ├── repository/ # 数据访问层
│ └── Dockerfile
├── analyzer/ # 分析服务 (Python + FastAPI)
│ ├── server.py # FastAPI 入口
│ ├── clean_bill.py # 账单清洗
│ ├── category.py # 分类推断
│ ├── cleaners/ # 清洗器
│ │ ├── alipay.py # 支付宝
│ │ └── wechat.py # 微信
│ └── Dockerfile
├── data/ # 测试数据目录
├── mongo/ # MongoDB 数据
└── docker-compose.yaml # 容器编排
```
## 🚀 快速开始
### 环境要求
- Docker & Docker Compose
- (可选) Go 1.21+、Python 3.12+、Node.js 20+
### 一键启动
```bash
# 克隆项目
git clone https://github.com/your-username/BillAI.git
cd BillAI
# 启动所有服务
docker-compose up -d --build
# 查看服务状态
docker-compose ps
```
### 访问地址
| 服务 | 地址 | 说明 |
|------|------|------|
| **前端页面** | http://localhost:3000 | Web 界面 |
| **后端 API** | http://localhost:8080 | RESTful API |
| **分析服务** | http://localhost:8001 | Python API |
| **Mongo Express** | http://localhost:8083 | 数据库管理 |
## 💻 本地开发
### 前端开发
```bash
cd web
yarn install
yarn dev
```
### 后端开发
```bash
cd server
go mod download
go run .
```
### 分析服务开发
```bash
cd analyzer
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
python server.py
```
## 📖 API 文档
### 后端 API (Go)
| 方法 | 路径 | 说明 |
|------|------|------|
| `POST` | `/api/auth/login` | 用户登录 |
| `GET` | `/api/auth/validate` | 验证 Token |
| `POST` | `/api/upload` | 上传并分析账单 |
| `GET` | `/api/bills` | 查询账单列表 |
| `POST` | `/api/bills/manual` | 手动录入账单 |
| `GET` | `/api/review` | 获取待复核记录 |
| `GET` | `/api/review-stats` | 待复核统计 |
| `GET` | `/api/monthly-stats` | 月度统计 |
| `GET` | `/health` | 健康检查 |
### 分析服务 API (Python)
| 方法 | 路径 | 说明 |
|------|------|------|
| `POST` | `/clean` | 清洗账单文件 |
| `POST` | `/category/infer` | 推断交易分类 |
| `GET` | `/category/list` | 获取分类列表 |
| `POST` | `/detect` | 检测账单类型 |
| `GET` | `/health` | 健康检查 |
## ⚙️ 配置说明
### 环境变量
| 变量 | 默认值 | 说明 |
|------|--------|------|
| `ANALYZER_URL` | `http://localhost:8001` | Python 分析服务地址 |
| `ANALYZER_MODE` | `http` | 适配器模式: http/subprocess |
| `MONGO_URI` | `mongodb://localhost:27017` | MongoDB 连接 URI |
| `MONGO_DATABASE` | `billai` | 数据库名称 |
| `JWT_SECRET` | - | JWT 加密密钥 |
| `TOKEN_EXPIRY` | `24` | Token 过期时间(小时) |
| `ADMIN_USERNAME` | - | 管理员用户名(可选) |
| `ADMIN_PASSWORD` | - | 管理员密码(可选) |
### 配置文件
- `server/config.yaml` - Go 后端配置
- `analyzer/config/category.yaml` - 分类规则配置
## 🔧 技术栈
| 层级 | 技术 | 版本 |
|------|------|------|
| **前端** | SvelteKit + TailwindCSS | 5.x / 4.x |
| **后端** | Go + Gin | 1.21 / 1.9 |
| **分析服务** | Python + FastAPI | 3.12 / 0.109+ |
| **数据库** | MongoDB | 8.0 |
| **容器化** | Docker Compose | - |
## 📊 支持的账单格式
-**微信支付** - 微信支付账单流水文件 (CSV)
-**支付宝** - 支付宝交易明细 (CSV)
## 🛣️ 路线图
- [x] 添加用户认证 (JWT)
- [x] 手动录入账单
- [x] 数据分析图表
- [ ] 支持更多账单格式(银行账单)
- [ ] AI 智能分类LLM
- [ ] 预算管理功能
- [ ] 移动端适配
- [ ] 数据导出 (Excel/PDF)
## 📋 版本历史
### v1.0.2 (2026-01-11)
- 🐛 修复账单时间显示为 UTC 时区的问题,现在正确显示本地时间
- 🐛 修复微信账单金额解析问题(半角¥符号)
- ✨ 新增月度统计 API支持获取所有月份的收支数据
- 🔧 优化数据分析页面月份选择器
### v1.0.1 (2026-01-11)
- 🐛 修复智能复核页面空数据显示错误
- 🔧 优化账单数据加载逻辑
### v1.0.0 (2026-01-07)
- ✨ 支持微信/支付宝账单上传与解析
- 🔐 用户登录认证 (JWT)
- 📊 可视化数据分析图表
- 🏷️ 智能分类推断
- 🔍 账单复核功能
- 📁 上传文件唯一命名
## 🤝 贡献指南
欢迎提交 Issue 和 Pull Request
1. Fork 本仓库
2. 创建特性分支 (`git checkout -b feature/amazing-feature`)
3. 提交更改 (`git commit -m 'Add amazing feature'`)
4. 推送分支 (`git push origin feature/amazing-feature`)
5. 创建 Pull Request
## 📄 许可证
本项目采用 MIT 许可证 - 详见 [LICENSE](LICENSE) 文件
## 🙏 致谢
- [SvelteKit](https://kit.svelte.dev/)
- [Gin](https://gin-gonic.com/)
- [FastAPI](https://fastapi.tiangolo.com/)
- [shadcn-svelte](https://shadcn-svelte.com/)