rosercode 524fa52908 feat: 规则支持一键应用到匹配账单,AI 规则建议可编辑并实时去重
本次为分类与标签规则补充两项能力:规则管理页可一键把规则的分类与标签应用到其命中的全部历史账单(先预览命中账单再确认,分类覆盖、标签追加);AI 生成的规则建议支持在弹窗内完整编辑名称、类型、关键词、金额区间、分类与标签,编辑后由后端实时重算重复标记并自动调整勾选,同时把「同时应用到勾选账单」默认开启并记入本机偏好。

变更内容:
- 后端新增 `POST /api/rule/apply-preview` 与 `POST /api/rule/apply`(`RuleService.previewApply` / `applyToMatchedTransactions`):按规则条件匹配全部历史账单并预览命中明细,应用时分类覆盖、标签追加,新增 DTO `RuleApplyRequest` 与 VO `RuleApplyPreviewVO` / `RuleApplyResultVO` / `RuleMatchedTransactionVO`。
- 后端新增 `POST /api/ai/rule/check-duplicates`(`AiRuleService.checkDuplicates`):纯本地复用规则签名逻辑,返回编辑后逐条重复标记,新增 DTO `AiRuleDuplicateCheckRequest`。
- 前端新增 `RuleApplyPreviewModal.vue`(命中账单预览与一键应用)与共享组件 `AiRuleEditorTable.vue`(完整编辑 + 编辑后防抖去重重算 + 重复项自动增删勾选),`RuleManage.vue` 与 `AiRuleSuggestModal.vue` 统一改用该编辑表。
- 规则管理页新增行内「应用」按钮与勾选规则后的「应用匹配账单」批量入口;收支记录页「同时应用到勾选账单」默认开启并经偏好 `ledgerly.transaction.aiRuleApplyToSelection` 持久化。
- 补充 `frontend/src/api/rule.ts`、`frontend/src/api/ai.ts` 接口封装与 `locales/messages.ts` 中英日文案。

说明:
- `apply-preview` / `apply` 与 `check-duplicates` 均为本地匹配、不调用大模型、不外发敏感数据,去重签名口径与匹配逻辑保持一致。
- 未改动数据库表结构。
- 一次应用命中较多账单时预览明细最多展示 500 条,应用仍作用于全部命中。
2026-10-13 23:44:47 +08:00
2026-08-30 14:36:22 +08:00

汇账

个人汇账应用:收支记录、分类标签、账单导入、归类规则、AI 智能记账、统计图表、定时提醒与系统日志。

功能特性

  • 收支记录:增删改查、筛选分页、批量操作、Excel 导出,支持「计入统计」「备注隐藏」开关。
  • 分类与标签:增删改查与默认数据,分类图标/标签颜色支持 AI 推荐。
  • 交易渠道:内置渠道 + 自定义渠道(改名不影响历史账单,有账单使用时不可删除)。
  • 统计与图表:月度收支、分类占比、收支趋势、分组统计与概览(ECharts)。
  • 账单导入:支付宝/微信/美团/淘宝/京东/交行/招行,支持 zip(含加密压缩包),预览后确认导入并按交易号去重。
  • 自定义规则:关键词、收支类型、金额区间组合,命中后自动应用分类与标签。
  • AI 能力:分类/标签建议与一键采纳、自然语言查询与记账、图片记账(SSE 进度)、生成分类标签与图标颜色、用量统计。
  • 定时提醒与通知:每天/每周/每月提醒,邮箱与 Server 酱推送。
  • 系统日志:访问/登录日志查询,运行日志在线查看(SSE 实时推送)。
  • 账号与多语言:JWT 登录、注册开关、运行时切换 SQLite/MySQL、中英日界面。

快速开始

前置条件:JDK 21(Temurin,含编译工具链与 jpackage)、Node.js(含 npm)。

首次构建或运行需联网:Gradle 会下载发行版与 Maven 依赖,前端会 npm install 安装依赖。使用 wrapper(./gradlew / gradlew.bat)可自动获取所需 Gradle 版本。

# Windows 用 gradlew.bat,Linux/macOS 用 ./gradlew
# 后端(默认 8080,接口文档 http://localhost:8080/doc.html)
./gradlew bootRun

# 前端(默认 5173,/api 由 Vite 代理到 8080)
cd frontend && npm install && npm run dev

数据库无需预先准备:启动后在页面按引导选择 SQLite(本地文件,零配置)或 MySQL,保存后立即生效并自动建表;配置持久化于 config/database.json。

代码检查

  • 后端:./gradlew lint(Spotless + Checkstyle + SpotBugs)。
  • 前端:cd frontend && npm run lint(ESLint;npm run lint:fix 自动修复,npm run format 用 Prettier 格式化)。
  • bootJar / bootGuiJar 会先执行后端检查与前端 ESLint,检查不通过则中断打包。

构建与打包

./gradlew bootJar bootGuiJar   # 普通 jar + 带 GUI 启动器的 jar(内嵌前端),产物在 build/libs/
./gradlew jpackageAppImage     # 免安装应用(普通 + GUI),产物在 build/jpackage/
  • 打包前会先安装前端依赖并构建前端产物,再一并打入 jar,无需手动 npm run build。
  • GUI jar 内嵌前后端与跨平台 JavaFX,单文件即可运行;配置与日志默认落在 jar 所在目录,可用 --home=<目录> 或环境变量 LEDGERLY_HOME 指定。
  • app-image 自带运行时、免安装,但只能为当前操作系统生成。
S
Description
No description provided
Readme
1.3 MiB
Languages
Java 62%
Vue 26.2%
TypeScript 10.8%
Go Template 0.9%