refactor: 统一用户上下文、导入顺序与日志规范
- 控制器移除 HttpServletRequest/HttpServletResponse 参数,新增 util/UserContext 统一获取当前用户 ID 与响应对象,导出接口改用 UserContext.getResponse() - 引入 Spotless 统一 Java 导入顺序(java/javax → 第三方库 → cn.rosercode),并全量重排 - 日志统一改用 Lombok @Slf4j,替换手写 LoggerFactory - 补充关键业务日志:登录/注册、交易增删改与批量操作、账单解析导入、DeepSeek 调用耗时与失败、AI 配置与连接测试、通知发送、分类/标签/规则变更 - 全局异常处理补充日志,未捕获异常由 e.printStackTrace() 改为 log.error 记录堆栈 - README 补充功能特性、技术栈与目录结构说明
This commit is contained in:
@@ -1,15 +1,66 @@
|
||||
# 收支管理系统
|
||||
|
||||
个人收支管理系统,支持收入/支出记录管理、分类管理、月度统计与图表展示。
|
||||
个人收支管理系统,支持收入/支出记录管理、分类与标签管理、多来源账单导入、自定义归类规则、AI 智能记账、月度统计与图表展示,并提供定时账单导入提醒与系统日志查看。
|
||||
|
||||
## 功能特性
|
||||
|
||||
### 收支记录
|
||||
- 收支记录的增删改查、分页与多条件筛选
|
||||
- 批量设置分类、批量设置标签、批量删除
|
||||
- 单条记录的「计入统计」开关与「备注隐藏」开关
|
||||
- 按当前筛选条件导出 Excel
|
||||
|
||||
### 分类与标签
|
||||
- 分类、标签的增删改查,新注册用户自动获得一套默认数据
|
||||
- 分类图标支持 AI 推荐 Emoji,标签颜色支持 AI 推荐十六进制色值
|
||||
|
||||
### 统计与图表
|
||||
- 月度收支统计、分类占比、收支趋势、分组统计与概览汇总
|
||||
- 基于 ECharts 的可视化图表展示
|
||||
|
||||
### 账单导入
|
||||
- 支持支付宝(CSV)、微信(xlsx)、美团、交通银行、招商银行(PDF)账单解析
|
||||
- 支持 zip 压缩包(含 ZipCrypto / AES 加密压缩包)上传
|
||||
- 「解析预览 → 确认导入」两步流程,按交易号去重
|
||||
|
||||
### 自定义规则
|
||||
- 基于关键词(匹配备注 / 交易对方 / 商品名称)、收支类型、金额区间组合的条件规则
|
||||
- 命中后自动应用分类与标签,支持优先级排序与启用 / 停用
|
||||
- 账单导入预览阶段展示命中的规则与建议分类 / 标签
|
||||
|
||||
### AI 能力(DeepSeek)
|
||||
- 交易记录分类与标签的批量 / 单条智能建议,支持一键采纳
|
||||
- 自然语言查询解析与自然语言记账解析
|
||||
- AI 生成分类、标签,以及 Emoji / 颜色推荐
|
||||
- AI 调用用量统计与明细查看
|
||||
|
||||
### 定时提醒与通知
|
||||
- 按每天 / 每周 / 每月周期提醒导入新账单(默认每月 1 日)
|
||||
- 多渠道推送:邮箱 SMTP(如 QQ 邮箱)、Server 酱(推送到个人微信)
|
||||
- 渠道管理、测试发送与发送日志查看
|
||||
|
||||
### 系统日志
|
||||
- 接口访问日志、登录日志的持久化与分页查询
|
||||
- 后端运行日志在线查看,支持基于 SSE 的实时推送与筛选
|
||||
|
||||
### 账号与多语言
|
||||
- JWT 登录认证,注册功能可开关
|
||||
- 运行时数据库配置与切换(SQLite / MySQL),无需启动前准备
|
||||
- 界面支持中文、英文、日文三种语言
|
||||
|
||||
## 技术栈
|
||||
|
||||
| 层级 | 技术 |
|
||||
|---|---|
|
||||
| 后端 | Spring Boot 3.3.6 + Java 21 + MyBatis-Plus + MySQL / SQLite |
|
||||
| 前端 | Vue 3 + TypeScript + Vite + Naive UI + ECharts |
|
||||
| 后端 | Spring Boot 3.3.6 + Java 21 + MyBatis-Plus 3.5.12 + MySQL / SQLite |
|
||||
| 前端 | Vue 3 + TypeScript + Vite + Naive UI + ECharts + Pinia |
|
||||
| 构建 | Gradle 8.13 (后端) / npm (前端) |
|
||||
| 认证 | JWT |
|
||||
| 对象映射 | MapStruct 1.6.3 |
|
||||
| 账单解析 | EasyExcel 4.0.3 + PDFBox 3.0.3 + Zip4j 2.11.5 |
|
||||
| AI 能力 | DeepSeek |
|
||||
| 通知渠道 | 邮箱 SMTP / Server 酱 |
|
||||
| 多语言 | 中文 / 英文 / 日文 (vue-i18n) |
|
||||
| API 文档 | Knife4j (OpenAPI 3) |
|
||||
| JDK 版本 | 21.0.12.1 (Temurin LTS) |
|
||||
| Node.js 版本 | v24.0.0 |
|
||||
@@ -78,23 +129,32 @@ java -jar build/libs/finance-app-0.0.1-SNAPSHOT.jar --server.port=18081
|
||||
finance-app/
|
||||
├── build.gradle
|
||||
├── src/main/java/cn/rosercode/finance/
|
||||
│ ├── controller/ # 接口层
|
||||
│ ├── service/ # 业务层
|
||||
│ ├── mapper/ # 数据访问层
|
||||
│ ├── entity/ # 实体类
|
||||
│ ├── dto/ # 请求对象
|
||||
│ ├── vo/ # 响应对象
|
||||
│ ├── config/ # 配置类
|
||||
│ ├── client/ # 外部服务客户端(DeepSeek)
|
||||
│ ├── common/ # 公共类
|
||||
│ ├── interceptor/ # 拦截器
|
||||
│ └── util/ # 工具类
|
||||
│ ├── config/ # 配置类(应用配置、动态数据源)
|
||||
│ ├── controller/ # 接口层
|
||||
│ ├── converter/ # MapStruct 对象转换器
|
||||
│ ├── dto/ # 请求对象
|
||||
│ ├── entity/ # 实体类
|
||||
│ ├── enums/ # 枚举
|
||||
│ ├── exporter/ # 导出处理
|
||||
│ ├── importer/ # 账单解析器(支付宝/微信/美团/银行)
|
||||
│ ├── interceptor/ # 拦截器(JWT、访问日志)
|
||||
│ ├── mapper/ # 数据访问层
|
||||
│ ├── notification/ # 通知渠道发送器
|
||||
│ ├── scheduler/ # 定时任务
|
||||
│ ├── service/ # 业务层(含 impl)
|
||||
│ ├── util/ # 工具类
|
||||
│ └── vo/ # 响应对象
|
||||
├── src/main/resources/
|
||||
│ ├── application.yml
|
||||
│ ├── mapper/
|
||||
│ └── sql/init.sql
|
||||
│ ├── logback-spring.xml
|
||||
│ ├── mapper/ # MyBatis XML
|
||||
│ └── sql/ # 建表脚本(init.sql / schema-sqlite.sql 等)
|
||||
└── frontend/ # Vue 3 前端
|
||||
└── src/
|
||||
├── api/ # API 请求封装
|
||||
├── locales/ # 多语言文案
|
||||
├── router/ # 路由配置
|
||||
├── store/ # 状态管理
|
||||
└── views/ # 页面组件
|
||||
|
||||
Reference in New Issue
Block a user