这是一个面向个人、家庭和小型团队的现代化财务管理系统,采用前后端分离架构,提供灵活、直观的财务记录与分析功能。
- 📝 日常记账 - 记录工资、衣食住行等日常流水
- 💹 理财投资 - 独立管理投资资产、交易记录和持仓信息 (FIFO)
- 👨👩👧👦 群组协作 - 支持家庭/团队共享财务数据
- 📊 统计分析 - 直观的图表展示收支趋势和资产分布
- 🎨 有机设计 - 柔和、温暖、自然的用户界面
| 技术 | 版本 | 说明 |
|---|---|---|
| Spring Boot | 3.2.12 | 后端框架 |
| Java | 17 | 编程语言 |
| MyBatis-Plus | 3.5.5 | ORM 框架 |
| Spring Security | 6.x | 安全框架 |
| JWT | - | 认证方案 |
| PostgreSQL | 14+ | 数据库 |
| Maven | 3.8+ | 构建工具 |
| 技术 | 版本 | 说明 |
|---|---|---|
| Vue | 3.4 | 前端框架 |
| TypeScript | 5.6 | 编程语言 |
| Vite | 6.0 | 构建工具 |
| Tailwind CSS | 3.4 | CSS 框架 |
| Headless UI | - | 无样式组件库 |
| Pinia | 2.2 | 状态管理 |
| Axios | 1.7 | HTTP 客户端 |
finance-app/
├── finance-common/ # 公共模块 (工具类、常量、异常)
├── finance-core/ # 核心模块 (实体、Repository、Service)
├── finance-api/ # API模块 (Controller、DTO、安全配置)
├── finance-web/ # Web入口 (启动类、配置)
├── finance-frontend/ # 前端项目 (Vue3 + TypeScript)
├── docs/ # 文档
├── .github/ # GitHub Actions CI/CD
├── .do/ # DigitalOcean 部署配置
├── Dockerfile # Docker 构建文件
├── docker-compose.yml # Docker Compose 配置
└── pom.xml # Maven 父 POM
- Java 17+
- Node.js 18+
- PostgreSQL 14+ (或使用 Supabase)
- Maven 3.8+
git clone https://github.com/your-username/finance-app.git
cd finance-app编辑 finance-web/src/main/resources/application.yml:
spring:
datasource:
url: jdbc:postgresql://localhost:5432/finance_db
username: your_username
password: your_password# Windows
set TUSHARE_TOKEN=你的_tushare_token_不要提交到仓库
.\mvnw.cmd clean install -DskipTests
.\mvnw.cmd spring-boot:run -pl finance-web
# Linux/Mac
export TUSHARE_TOKEN=你的_tushare_token_不要提交到仓库
./mvnw clean install -DskipTests
./mvnw spring-boot:run -pl finance-web后端运行在: http://localhost:8080/api
cd finance-frontend
npm install
npm run dev前端运行在: http://localhost:5173
# 1) 复制并填写环境变量(不要把 token 提交到仓库)
# 参考: docs/env.example
#
# 2) 启动所有服务 (后端 + PostgreSQL)
docker-compose up -d
# 查看日志
docker-compose logs -f backend详尽的部署与环境说明请见 docs/DEPLOYMENT.md(包含 OAuth、Secrets、local testing、数据库迁移脚本与 DigitalOcean 配置)。
新增: OAuth2 (Google / GitHub) 支持 ✅
- 本项目已集成 OAuth2 登录流程(后端自动生成 ClientRegistrationRepository 依赖于
spring-boot-starter-oauth2-client)。 - 请在
docs/DEPLOYMENT.md中查看:本地/生产回调 URL、在 OAuth 提供商(GitHub/Google)中配置回调、以及在 DigitalOcean 控制台中设置OAUTH_*secrets 的详细步骤。
-
Fork 本仓库 到你的 GitHub
-
创建 DigitalOcean 账号 并进入 App Platform
-
创建新应用
- 选择 GitHub 作为源
- 授权并选择你 fork 的仓库
- 选择
main分支
-
配置环境变量 (在 App Platform 控制台设置):
| 变量名 | 说明 | 示例 |
|---|---|---|
SPRING_DATASOURCE_URL |
数据库连接 URL | jdbc:postgresql://xxx.pooler.supabase.com:5432/postgres |
SPRING_DATASOURCE_USERNAME |
数据库用户名 | postgres.xxxxx |
SPRING_DATASOURCE_PASSWORD |
数据库密码 | your-password |
JWT_SECRET |
JWT 密钥 (至少 256 位) | your-256-bit-secret-key |
-
部署 - 点击 Deploy,等待构建完成
-
访问应用 - 使用 DigitalOcean 分配的域名
推荐使用 Supabase 的免费 PostgreSQL:
OAuth 回呼 URL 提示:如果你启用第三方登录(GitHub / Google),请在提供商控制台注册以下后端回调:
- GitHub:
https://<your-domain>/api/login/oauth2/code/github - Google:
https://<your-domain>/api/login/oauth2/code/google
并把前端回调(接收 token)设置为: https://<your-domain>/auth/callback。
- 创建 Supabase 项目
- 进入 Settings → Database → Connection string
- 选择 Session Pooler 模式 (兼容 IPv4)
- 复制连接信息填入环境变量
| 方法 | 路径 | 说明 | 认证 |
|---|---|---|---|
| POST | /api/v1/auth/register |
用户注册 | ❌ |
| POST | /api/v1/auth/login |
用户登录 | ❌ |
| GET | /api/v1/auth/me |
获取当前用户 | ✅ |
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/v1/flows |
获取流水列表 |
| POST | /api/v1/flows |
添加流水 |
| PUT | /api/v1/flows/{id} |
更新流水 |
| DELETE | /api/v1/flows/{id} |
删除流水 |
| GET | /api/v1/flows/range |
按时间范围查询流水,接受 startTime / endTime(ISO 8601) |
/api/v1/categories- 分类管理/api/v1/budgets- 预算管理/api/v1/assets- 资产管理/api/v1/transactions- 交易记录/api/v1/groups- 群组管理
- 前端已迁移为以 Pinia 为主的集中式状态管理:
useFlowStore、useAssetStore等负责缓存与增量更新;页面组件应优先从 store 读取数据。 - 新增后端接口
/api/v1/flows/range用于按时间范围高效查询大量流水数据,前端会在筛选有时间范围时使用该接口。 - 交易与流水的前端 API 已支持按时间范围查询(例如
startDate/endDate)——部署后请确保后端支持这些 query 参数。
在你要把这些变更推送到远端并部署前,请先运行 TypeScript 类型检查并进行一次端到端测试(推荐在 staging 环境):
cd finance-frontend
npm install
npx vue-tsc --noEmit
npm run build
cd ..
# 后端构建
.\mvnw.cmd clean install -DskipTests# 注册用户
$body = @{userName="testuser"; password="Test123456"; email="test@example.com"} | ConvertTo-Json
Invoke-RestMethod -Uri "http://localhost:8080/api/v1/auth/register" -Method POST -Body $body -ContentType "application/json"
# 登录获取 Token
$body = @{userName="testuser"; password="Test123456"} | ConvertTo-Json
$response = Invoke-RestMethod -Uri "http://localhost:8080/api/v1/auth/login" -Method POST -Body $body -ContentType "application/json"
$token = $response.data.token
# 带 Token 请求
$headers = @{Authorization = "Bearer $token"}
Invoke-RestMethod -Uri "http://localhost:8080/api/v1/auth/me" -Headers $headerscurl http://localhost:8080/api/actuator/health- Maven 多模块架构
- 11 个实体类 + Repository
- Spring Security + JWT 认证
- CORS 跨域配置
- 统一响应封装 + 全局异常处理
- 前端 Vue3 项目 (登录/注册/仪表盘/流水/资产/预算页面)
- 10 个 UI 组件库
- Docker 容器化配置
- DigitalOcean 部署配置
- GitHub Actions CI/CD
- FIFO 持仓计算逻辑
- 盈亏统计功能
- 单元测试覆盖
- Swagger API 文档
- 图表统计功能
- Fork 本仓库
- 创建特性分支 (
git checkout -b feature/amazing-feature) - 提交更改 (
git commit -m 'Add amazing feature') - 推送到分支 (
git push origin feature/amazing-feature) - 提交 Pull Request
- 项目: Personal Finance Management System
- 版本: 1.0.0-SNAPSHOT
- 更新日期: 2025-12-08
Made with ❤️ by Finance Team