refactor: 品牌改名为汇账 Ledgerly,包名与工程标识统一为 ledgerly

- Java 包名由 cn.rosercode.finance 改为 cn.rosercode.ledgerly,主类 FinanceApplication 更名为 LedgerlyApplication
- Gradle 项目名、spring.application.name 与日志文件名统一为 ledgerly
- 前端界面文案、页面标题、登录注册标题、README 与 Knife4j 标题更新为汇账 / Ledgerly
- 前端本地存储键前缀由 finance. 改为 ledgerly.,并新增旧键自动迁移避免老用户偏好丢失
- 运行目录系统属性与环境变量改为 ledgerly.home / LEDGERLY_HOME
- 部署编排、启动脚本、容器名、SQLite 默认路径与构建产物名同步改为 ledgerly
This commit is contained in:
2026-09-23 17:33:59 +08:00
parent e0fa1abec5
commit 24074aeea2
322 changed files with 1270 additions and 1254 deletions
+8 -8
View File
@@ -1,6 +1,6 @@
# 收支管理系统 # 汇账
个人收支管理系统,支持收入/支出记录管理、分类与标签管理、多来源账单导入、自定义归类规则、AI 智能记账、月度统计与图表展示,并提供定时账单导入提醒与系统日志查看。 个人汇账,支持收入/支出记录管理、分类与标签管理、多来源账单导入、自定义归类规则、AI 智能记账、月度统计与图表展示,并提供定时账单导入提醒与系统日志查看。
## 功能特性 ## 功能特性
@@ -92,7 +92,7 @@
## 启动后端 ## 启动后端
```bash ```bash
cd finance-app cd ledgerly
set JAVA_HOME=D:\venv\jdk-21 set JAVA_HOME=D:\venv\jdk-21
gradlew.bat bootRun gradlew.bat bootRun
``` ```
@@ -103,7 +103,7 @@ gradlew.bat bootRun
## 启动前端 ## 启动前端
```bash ```bash
cd finance-app/frontend cd ledgerly/frontend
npm run dev npm run dev
``` ```
@@ -119,12 +119,12 @@ gradle bootJar
- 该任务会先执行前端 `npm run build`,再把 `frontend/dist` 复制到 jar 内的 `BOOT-INF/classes/static/` - 该任务会先执行前端 `npm run build`,再把 `frontend/dist` 复制到 jar 内的 `BOOT-INF/classes/static/`
- 构建环境需具备 Node(开发容器通过 `NODE_HOME` 指向系统 nvm Node,npm 走本地 verdaccio 源) - 构建环境需具备 Node(开发容器通过 `NODE_HOME` 指向系统 nvm Node,npm 走本地 verdaccio 源)
- 输出文件:`build/libs/finance-app-0.0.1-SNAPSHOT.jar` - 输出文件:`build/libs/ledgerly-0.0.1-SNAPSHOT.jar`
启动(默认 8080,可另指定端口): 启动(默认 8080,可另指定端口):
```bash ```bash
java -jar build/libs/finance-app-0.0.1-SNAPSHOT.jar --server.port=18081 java -jar build/libs/ledgerly-0.0.1-SNAPSHOT.jar --server.port=18081
``` ```
访问对应端口即可同时使用前端与接口;刷新 `/dashboard` 等子路由会由后端回退到 `index.html`。 访问对应端口即可同时使用前端与接口;刷新 `/dashboard` 等子路由会由后端回退到 `index.html`。
@@ -132,9 +132,9 @@ java -jar build/libs/finance-app-0.0.1-SNAPSHOT.jar --server.port=18081
## 项目结构 ## 项目结构
``` ```
finance-app/ ledgerly/
├── build.gradle ├── build.gradle
├── src/main/java/cn/rosercode/finance/ ├── src/main/java/cn/rosercode/ledgerly/
│ ├── client/ # 外部服务客户端(DeepSeek) │ ├── client/ # 外部服务客户端(DeepSeek)
│ ├── common/ # 公共类 │ ├── common/ # 公共类
│ ├── config/ # 配置类(应用配置、动态数据源) │ ├── config/ # 配置类(应用配置、动态数据源)
+1 -1
View File
@@ -4,7 +4,7 @@
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" /> <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>收支管理系统</title> <title>汇账 Ledgerly</title>
</head> </head>
<body> <body>
<div id="app"></div> <div id="app"></div>
@@ -28,7 +28,7 @@ const hasPassword = ref(false)
// 表单数据 // 表单数据
const form = ref({ const form = ref({
type: 'SQLITE' as DatabaseType, type: 'SQLITE' as DatabaseType,
sqlitePath: 'data/finance.db', sqlitePath: 'data/ledgerly.db',
host: 'localhost', host: 'localhost',
port: 3306, port: 3306,
database: '', database: '',
@@ -45,7 +45,7 @@ async function loadStatus() {
if (data?.configured) { if (data?.configured) {
form.value.type = data.type form.value.type = data.type
if (data.type === 'SQLITE') { if (data.type === 'SQLITE') {
form.value.sqlitePath = data.sqlitePath || 'data/finance.db' form.value.sqlitePath = data.sqlitePath || 'data/ledgerly.db'
} else { } else {
form.value.host = data.host || 'localhost' form.value.host = data.host || 'localhost'
form.value.port = data.port || 3306 form.value.port = data.port || 3306
@@ -14,7 +14,7 @@ import { STORAGE_KEYS } from '../utils/storageKeys'
import { usePageSizeOptions } from '../composables/usePageSizeOptions' import { usePageSizeOptions } from '../composables/usePageSizeOptions'
import { useTablePageSize } from '../composables/useTablePageSize' import { useTablePageSize } from '../composables/useTablePageSize'
/** 关系类型偏好存储键(界面偏好统一以 finance. 前缀命名) */ /** 关系类型偏好存储键(界面偏好统一以 ledgerly. 前缀命名) */
const RELATION_TYPE_KEY = STORAGE_KEYS.transactionRelationType const RELATION_TYPE_KEY = STORAGE_KEYS.transactionRelationType
const props = defineProps<{ const props = defineProps<{
+4 -4
View File
@@ -49,7 +49,7 @@ export default {
// 登录页 // 登录页
login: { login: {
title: { zh: '收支管理系统 - 登录', en: 'Finance Manager - Sign In', ja: '収支管理システム - ログイン' }, title: { zh: '汇账 - 登录', en: 'Ledgerly - Sign In', ja: 'Ledgerly - ログイン' },
username: { zh: '用户名', en: 'Username', ja: 'ユーザー名' }, username: { zh: '用户名', en: 'Username', ja: 'ユーザー名' },
password: { zh: '密码', en: 'Password', ja: 'パスワード' }, password: { zh: '密码', en: 'Password', ja: 'パスワード' },
usernamePlaceholder: { zh: '请输入用户名', en: 'Enter your username', ja: 'ユーザー名を入力してください' }, usernamePlaceholder: { zh: '请输入用户名', en: 'Enter your username', ja: 'ユーザー名を入力してください' },
@@ -64,7 +64,7 @@ export default {
// 注册页 // 注册页
register: { register: {
title: { zh: '收支管理系统 - 注册', en: 'Finance Manager - Sign Up', ja: '収支管理システム - 新規登録' }, title: { zh: '汇账 - 注册', en: 'Ledgerly - Sign Up', ja: 'Ledgerly - 新規登録' },
username: { zh: '用户名', en: 'Username', ja: 'ユーザー名' }, username: { zh: '用户名', en: 'Username', ja: 'ユーザー名' },
nickname: { zh: '昵称', en: 'Nickname', ja: 'ニックネーム' }, nickname: { zh: '昵称', en: 'Nickname', ja: 'ニックネーム' },
password: { zh: '密码', en: 'Password', ja: 'パスワード' }, password: { zh: '密码', en: 'Password', ja: 'パスワード' },
@@ -85,7 +85,7 @@ export default {
// 主布局 // 主布局
layout: { layout: {
appTitle: { zh: '收支管理', en: 'Finance Manager', ja: '収支管理' }, appTitle: { zh: '汇账', en: 'Ledgerly', ja: 'Ledgerly' },
appSubtitle: { zh: '个人财务管理', en: 'Personal Finance', ja: '個人財務管理' }, appSubtitle: { zh: '个人财务管理', en: 'Personal Finance', ja: '個人財務管理' },
dashboard: { zh: '统计面板', en: 'Dashboard', ja: 'ダッシュボード' }, dashboard: { zh: '统计面板', en: 'Dashboard', ja: 'ダッシュボード' },
transactions: { zh: '收支记录', en: 'Transactions', ja: '収支記録' }, transactions: { zh: '收支记录', en: 'Transactions', ja: '収支記録' },
@@ -113,7 +113,7 @@ export default {
configFile: { zh: '配置文件', en: 'Config file', ja: '設定ファイル' }, configFile: { zh: '配置文件', en: 'Config file', ja: '設定ファイル' },
type: { zh: '数据库类型', en: 'Database type', ja: 'データベースの種類' }, type: { zh: '数据库类型', en: 'Database type', ja: 'データベースの種類' },
sqlitePath: { zh: '数据库文件', en: 'Database file', ja: 'データベースファイル' }, sqlitePath: { zh: '数据库文件', en: 'Database file', ja: 'データベースファイル' },
sqlitePathPlaceholder: { zh: '例如 data/finance.db', en: 'e.g. data/finance.db', ja: '例:data/finance.db' }, sqlitePathPlaceholder: { zh: '例如 data/ledgerly.db', en: 'e.g. data/ledgerly.db', ja: '例:data/ledgerly.db' },
sqliteHint: { zh: 'SQLite 为本地单文件数据库,路径相对于服务运行目录;建议使用 data 目录并做好持久化挂载。', en: 'SQLite is a single local file; the path is relative to the server working directory. Use a data directory with persistent storage.', ja: 'SQLite はローカルの単一ファイルです。パスはサーバーの作業ディレクトリからの相対パスです。data ディレクトリと永続化ストレージの利用を推奨します。' }, sqliteHint: { zh: 'SQLite 为本地单文件数据库,路径相对于服务运行目录;建议使用 data 目录并做好持久化挂载。', en: 'SQLite is a single local file; the path is relative to the server working directory. Use a data directory with persistent storage.', ja: 'SQLite はローカルの単一ファイルです。パスはサーバーの作業ディレクトリからの相対パスです。data ディレクトリと永続化ストレージの利用を推奨します。' },
sqlitePathRequired: { zh: '请填写 SQLite 数据库文件路径', en: 'Please enter the SQLite database file path', ja: 'SQLite データベースファイルのパスを入力してください' }, sqlitePathRequired: { zh: '请填写 SQLite 数据库文件路径', en: 'Please enter the SQLite database file path', ja: 'SQLite データベースファイルのパスを入力してください' },
mysqlRequired: { zh: '请填写主机地址、数据库名与用户名', en: 'Please fill in host, database and username', ja: 'ホスト、データベース名、ユーザー名を入力してください' }, mysqlRequired: { zh: '请填写主机地址、数据库名与用户名', en: 'Please fill in host, database and username', ja: 'ホスト、データベース名、ユーザー名を入力してください' },
+1 -1
View File
@@ -4,7 +4,7 @@ import { ref } from 'vue'
import { getUserInfo } from '../api/user' import { getUserInfo } from '../api/user'
import { readString, removeKey, writeString } from '../utils/storage' import { readString, removeKey, writeString } from '../utils/storage'
/** 登录令牌存储键(认证凭据,不属于界面偏好,不纳入 finance. 前缀) */ /** 登录令牌存储键(认证凭据,不属于界面偏好,不纳入 ledgerly. 前缀) */
const TOKEN_KEY = 'token' const TOKEN_KEY = 'token'
export const useUserStore = defineStore('user', () => { export const useUserStore = defineStore('user', () => {
+34 -18
View File
@@ -1,48 +1,64 @@
// 本地存储键常量:界面/用户偏好统一以 finance. 前缀命名,作为唯一来源供路由与各页面复用 // 本地存储键常量:界面/用户偏好统一以 ledgerly. 前缀命名,作为唯一来源供路由与各页面复用
import { migrateKey } from './storage'
/** 当前使用的本地存储键 */ /** 当前使用的本地存储键 */
export const STORAGE_KEYS = { export const STORAGE_KEYS = {
// 语言偏好 // 语言偏好
locale: 'finance.locale', locale: 'ledgerly.locale',
// 邮箱账单页标签页 // 邮箱账单页标签页
emailBillTab: 'finance.emailBill.tab', emailBillTab: 'ledgerly.emailBill.tab',
// 系统日志页标签页 // 系统日志页标签页
logsTab: 'finance.logs.tab', logsTab: 'ledgerly.logs.tab',
// 账单导入的账单类型 // 账单导入的账单类型
billImportBillType: 'finance.billImport.billType', billImportBillType: 'ledgerly.billImport.billType',
// 统计面板偏好 // 统计面板偏好
dashboardPrefs: 'finance.dashboard.prefs', dashboardPrefs: 'ledgerly.dashboard.prefs',
// 统计面板 AI 查询历史 // 统计面板 AI 查询历史
dashboardAiSearchHistory: 'finance.dashboard.aiSearchHistory', dashboardAiSearchHistory: 'ledgerly.dashboard.aiSearchHistory',
// 统计面板 AI 查询浮窗位置尺寸 // 统计面板 AI 查询浮窗位置尺寸
dashboardAiQueryWindow: 'finance.dashboard.aiQueryWindow', dashboardAiQueryWindow: 'ledgerly.dashboard.aiQueryWindow',
// 收支记录 AI 建议范围 // 收支记录 AI 建议范围
transactionAiScope: 'finance.transaction.aiScope', transactionAiScope: 'ledgerly.transaction.aiScope',
// 收支记录 AI 记账方式 // 收支记录 AI 记账方式
transactionAiRecordTab: 'finance.transaction.aiRecordTab', transactionAiRecordTab: 'ledgerly.transaction.aiRecordTab',
// 收支记录备注关键词历史 // 收支记录备注关键词历史
transactionRemarkHistory: 'finance.transaction.remarkHistory', transactionRemarkHistory: 'ledgerly.transaction.remarkHistory',
// 收支记录筛选偏好(收支记录页与统计面板共用) // 收支记录筛选偏好(收支记录页与统计面板共用)
transactionFilterPrefs: 'finance.transaction.filterPrefs', transactionFilterPrefs: 'ledgerly.transaction.filterPrefs',
// 各表格每页大小偏好(聚合 JSON,按表格键区分,本机记忆) // 各表格每页大小偏好(聚合 JSON,按表格键区分,本机记忆)
paginationTablePageSizes: 'finance.pagination.tablePageSizes', paginationTablePageSizes: 'ledgerly.pagination.tablePageSizes',
// 账单关系类型 // 账单关系类型
transactionRelationType: 'finance.transaction.relationType', transactionRelationType: 'ledgerly.transaction.relationType',
// 收支记录 AI 查询历史 // 收支记录 AI 查询历史
transactionAiQueryHistory: 'finance.transaction.aiQueryHistory', transactionAiQueryHistory: 'ledgerly.transaction.aiQueryHistory',
// 收支记录 AI 查询浮窗位置尺寸 // 收支记录 AI 查询浮窗位置尺寸
transactionAiQueryWindow: 'finance.transaction.aiQueryWindow', transactionAiQueryWindow: 'ledgerly.transaction.aiQueryWindow',
// 内容区滚动位置(sessionStorage,按路由拼接后缀) // 内容区滚动位置(sessionStorage,按路由拼接后缀)
scrollPrefix: 'finance.scroll.', scrollPrefix: 'ledgerly.scroll.',
} as const } as const
/** 历史遗留的存储键(未带 finance. 前缀),首次读取时迁移到新键 */ /** 历史遗留的存储键(未带前缀),首次读取时迁移到新键 */
export const LEGACY_STORAGE_KEYS = { export const LEGACY_STORAGE_KEYS = {
locale: 'locale', locale: 'locale',
emailBillTab: 'emailBill.tab', emailBillTab: 'emailBill.tab',
logsTab: 'logs.tab', logsTab: 'logs.tab',
} as const } as const
/** 当前存储键前缀 */
const CURRENT_PREFIX = 'ledgerly.'
/** 上一代存储键前缀(品牌改名前的 finance.) */
const LEGACY_PREFIX = 'finance.'
/** 模块加载时迁移上一代 finance.* 偏好键到 ledgerly.*,保证老用户偏好不丢失 */
function migrateLegacyPrefixedKeys(): void {
Object.values(STORAGE_KEYS).forEach((key) => {
if (!key.startsWith(CURRENT_PREFIX)) return
migrateKey(LEGACY_PREFIX + key.slice(CURRENT_PREFIX.length), key)
})
}
migrateLegacyPrefixedKeys()
/** 生成指定路由的滚动位置存储键 */ /** 生成指定路由的滚动位置存储键 */
export function scrollKey(path: string): string { export function scrollKey(path: string): string {
return `${STORAGE_KEYS.scrollPrefix}${path}` return `${STORAGE_KEYS.scrollPrefix}${path}`
+1 -1
View File
@@ -10,4 +10,4 @@ pluginManagement {
} }
} }
rootProject.name = 'finance-app' rootProject.name = 'ledgerly'
@@ -1,4 +1,4 @@
package cn.rosercode.finance; package cn.rosercode.ledgerly;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -12,7 +12,7 @@ import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
* 应用在未配置数据库时也能正常启动,由动态数据源提供占位连接。</p> * 应用在未配置数据库时也能正常启动,由动态数据源提供占位连接。</p>
*/ */
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) @SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
public class FinanceApplication { public class LedgerlyApplication {
/** /**
* 应用程序主入口方法。 * 应用程序主入口方法。
@@ -21,6 +21,6 @@ public class FinanceApplication {
*/ */
public static void main(String[] args) { public static void main(String[] args) {
// 启动 Spring Boot 应用 // 启动 Spring Boot 应用
SpringApplication.run(FinanceApplication.class, args); SpringApplication.run(LedgerlyApplication.class, args);
} }
} }
@@ -1,4 +1,4 @@
package cn.rosercode.finance.client; package cn.rosercode.ledgerly.client;
import java.time.Duration; import java.time.Duration;
import java.util.ArrayList; import java.util.ArrayList;
@@ -19,7 +19,7 @@ import com.openai.models.completions.CompletionUsage;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import cn.rosercode.finance.common.BusinessException; import cn.rosercode.ledgerly.common.BusinessException;
/** /**
* DeepSeek 客户端,基于 OpenAI Java SDK 封装 Chat Completions 调用与响应解析。 * DeepSeek 客户端,基于 OpenAI Java SDK 封装 Chat Completions 调用与响应解析。
@@ -1,4 +1,4 @@
package cn.rosercode.finance.client; package cn.rosercode.ledgerly.client;
import lombok.Data; import lombok.Data;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.common; package cn.rosercode.ledgerly.common;
/** /**
* 业务异常类。 * 业务异常类。
@@ -1,4 +1,4 @@
package cn.rosercode.finance.common; package cn.rosercode.ledgerly.common;
/** /**
* 数据库未配置异常。 * 数据库未配置异常。
@@ -1,4 +1,4 @@
package cn.rosercode.finance.common; package cn.rosercode.ledgerly.common;
import java.io.IOException; import java.io.IOException;
@@ -13,7 +13,7 @@ import org.springframework.web.context.request.async.AsyncRequestNotUsableExcept
import org.springframework.web.context.request.async.AsyncRequestTimeoutException; import org.springframework.web.context.request.async.AsyncRequestTimeoutException;
import org.springframework.web.servlet.resource.NoResourceFoundException; import org.springframework.web.servlet.resource.NoResourceFoundException;
import cn.rosercode.finance.config.SpaRouteSupport; import cn.rosercode.ledgerly.config.SpaRouteSupport;
/** /**
* 全局异常处理器。 * 全局异常处理器。
@@ -1,4 +1,4 @@
package cn.rosercode.finance.common; package cn.rosercode.ledgerly.common;
import java.util.List; import java.util.List;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.common; package cn.rosercode.ledgerly.common;
import lombok.Data; import lombok.Data;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.config; package cn.rosercode.ledgerly.config;
import org.springframework.cache.CacheManager; import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.EnableCaching; import org.springframework.cache.annotation.EnableCaching;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.config; package cn.rosercode.ledgerly.config;
import lombok.Data; import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConfigurationProperties;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.config; package cn.rosercode.ledgerly.config;
import io.swagger.v3.oas.models.Components; import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.OpenAPI;
@@ -15,9 +15,9 @@ public class Knife4jConfig {
public OpenAPI customOpenAPI() { public OpenAPI customOpenAPI() {
return new OpenAPI() return new OpenAPI()
.info(new Info() .info(new Info()
.title("收支管理系统 API") .title("汇账 Ledgerly API")
.version("1.0.0") .version("1.0.0")
.description("个人收支管理系统后端接口文档")) .description("汇账 Ledgerly 个人收支管理后端接口文档"))
.addSecurityItem(new SecurityRequirement().addList("Bearer")) .addSecurityItem(new SecurityRequirement().addList("Bearer"))
.components(new Components() .components(new Components()
.addSecuritySchemes("Bearer", .addSecuritySchemes("Bearer",
@@ -1,4 +1,4 @@
package cn.rosercode.finance.config; package cn.rosercode.ledgerly.config;
import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
@@ -12,7 +12,7 @@ import org.springframework.context.annotation.Configuration;
* <p>配置 MyBatis-Plus 的 Mapper 扫描路径和分页插件等。</p> * <p>配置 MyBatis-Plus 的 Mapper 扫描路径和分页插件等。</p>
*/ */
@Configuration @Configuration
@MapperScan("cn.rosercode.finance.mapper") @MapperScan("cn.rosercode.ledgerly.mapper")
public class MybatisPlusConfig { public class MybatisPlusConfig {
/** /**
@@ -1,4 +1,4 @@
package cn.rosercode.finance.config; package cn.rosercode.ledgerly.config;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.EnableScheduling;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.config; package cn.rosercode.ledgerly.config;
import java.io.IOException; import java.io.IOException;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.config; package cn.rosercode.ledgerly.config;
/** /**
* SPA 路由判断工具。 * SPA 路由判断工具。
@@ -1,12 +1,12 @@
package cn.rosercode.finance.config; package cn.rosercode.ledgerly.config;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import cn.rosercode.finance.interceptor.AccessLogInterceptor; import cn.rosercode.ledgerly.interceptor.AccessLogInterceptor;
import cn.rosercode.finance.interceptor.JwtInterceptor; import cn.rosercode.ledgerly.interceptor.JwtInterceptor;
/** /**
* Web MVC 配置类。 * Web MVC 配置类。
@@ -1,4 +1,4 @@
package cn.rosercode.finance.config.app; package cn.rosercode.ledgerly.config.app;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data; import lombok.Data;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.config.app; package cn.rosercode.ledgerly.config.app;
import java.io.IOException; import java.io.IOException;
import java.nio.file.Files; import java.nio.file.Files;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.config.datasource; package cn.rosercode.ledgerly.config.datasource;
/** /**
* 动态数据源上下文,保存当前生效的数据源标识与类型。 * 动态数据源上下文,保存当前生效的数据源标识与类型。
@@ -1,4 +1,4 @@
package cn.rosercode.finance.config.datasource; package cn.rosercode.ledgerly.config.datasource;
/** /**
* 数据库类型枚举,标识当前支持的数据库种类。 * 数据库类型枚举,标识当前支持的数据库种类。
@@ -1,10 +1,10 @@
package cn.rosercode.finance.config.datasource; package cn.rosercode.ledgerly.config.datasource;
import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner; import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import cn.rosercode.finance.service.DatabaseService; import cn.rosercode.ledgerly.service.DatabaseService;
/** /**
* 数据库启动引导器。 * 数据库启动引导器。
@@ -1,4 +1,4 @@
package cn.rosercode.finance.config.datasource; package cn.rosercode.ledgerly.config.datasource;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data; import lombok.Data;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.config.datasource; package cn.rosercode.ledgerly.config.datasource;
import java.io.IOException; import java.io.IOException;
import java.nio.file.Files; import java.nio.file.Files;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.config.datasource; package cn.rosercode.ledgerly.config.datasource;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.config.datasource; package cn.rosercode.ledgerly.config.datasource;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.config.datasource; package cn.rosercode.ledgerly.config.datasource;
import javax.sql.DataSource; import javax.sql.DataSource;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.config.datasource; package cn.rosercode.ledgerly.config.datasource;
import java.sql.Connection; import java.sql.Connection;
import java.sql.PreparedStatement; import java.sql.PreparedStatement;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.config.datasource; package cn.rosercode.ledgerly.config.datasource;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.sql.Connection; import java.sql.Connection;
@@ -6,7 +6,7 @@ import java.sql.SQLException;
import java.util.logging.Logger; import java.util.logging.Logger;
import javax.sql.DataSource; import javax.sql.DataSource;
import cn.rosercode.finance.common.DatabaseNotConfiguredException; import cn.rosercode.ledgerly.common.DatabaseNotConfiguredException;
/** /**
* 未配置数据库时使用的占位数据源。 * 未配置数据库时使用的占位数据源。
@@ -1,4 +1,4 @@
package cn.rosercode.finance.controller; package cn.rosercode.ledgerly.controller;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
@@ -19,52 +19,52 @@ import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter; import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
import cn.rosercode.finance.common.BusinessException; import cn.rosercode.ledgerly.common.BusinessException;
import cn.rosercode.finance.common.Result; import cn.rosercode.ledgerly.common.Result;
import cn.rosercode.finance.dto.AiApplyRequest; import cn.rosercode.ledgerly.dto.AiApplyRequest;
import cn.rosercode.finance.dto.AiCategoryRequest; import cn.rosercode.ledgerly.dto.AiCategoryRequest;
import cn.rosercode.finance.dto.AiChannelRequest; import cn.rosercode.ledgerly.dto.AiChannelRequest;
import cn.rosercode.finance.dto.AiConfigRequest; import cn.rosercode.ledgerly.dto.AiConfigRequest;
import cn.rosercode.finance.dto.AiDecorateRequest; import cn.rosercode.ledgerly.dto.AiDecorateRequest;
import cn.rosercode.finance.dto.AiQueryRequest; import cn.rosercode.ledgerly.dto.AiQueryRequest;
import cn.rosercode.finance.dto.AiRecordRequest; import cn.rosercode.ledgerly.dto.AiRecordRequest;
import cn.rosercode.finance.dto.AiRelationRequest; import cn.rosercode.ledgerly.dto.AiRelationRequest;
import cn.rosercode.finance.dto.AiRuleApplyRequest; import cn.rosercode.ledgerly.dto.AiRuleApplyRequest;
import cn.rosercode.finance.dto.AiRuleSuggestRequest; import cn.rosercode.ledgerly.dto.AiRuleSuggestRequest;
import cn.rosercode.finance.dto.AiSuggestOneRequest; import cn.rosercode.ledgerly.dto.AiSuggestOneRequest;
import cn.rosercode.finance.dto.AiSuggestRequest; import cn.rosercode.ledgerly.dto.AiSuggestRequest;
import cn.rosercode.finance.dto.AiTagRequest; import cn.rosercode.ledgerly.dto.AiTagRequest;
import cn.rosercode.finance.entity.AiImage; import cn.rosercode.ledgerly.entity.AiImage;
import cn.rosercode.finance.mapper.AiImageMapper; import cn.rosercode.ledgerly.mapper.AiImageMapper;
import cn.rosercode.finance.service.AiCategoryService; import cn.rosercode.ledgerly.service.AiCategoryService;
import cn.rosercode.finance.service.AiChannelService; import cn.rosercode.ledgerly.service.AiChannelService;
import cn.rosercode.finance.service.AiConfigService; import cn.rosercode.ledgerly.service.AiConfigService;
import cn.rosercode.finance.service.AiDecorationService; import cn.rosercode.ledgerly.service.AiDecorationService;
import cn.rosercode.finance.service.AiImageRecordService; import cn.rosercode.ledgerly.service.AiImageRecordService;
import cn.rosercode.finance.service.AiImageRecordStreamService; import cn.rosercode.ledgerly.service.AiImageRecordStreamService;
import cn.rosercode.finance.service.AiImageStorage; import cn.rosercode.ledgerly.service.AiImageStorage;
import cn.rosercode.finance.service.AiQueryService; import cn.rosercode.ledgerly.service.AiQueryService;
import cn.rosercode.finance.service.AiRecordService; import cn.rosercode.ledgerly.service.AiRecordService;
import cn.rosercode.finance.service.AiRelationService; import cn.rosercode.ledgerly.service.AiRelationService;
import cn.rosercode.finance.service.AiRuleService; import cn.rosercode.ledgerly.service.AiRuleService;
import cn.rosercode.finance.service.AiStatisticsService; import cn.rosercode.ledgerly.service.AiStatisticsService;
import cn.rosercode.finance.service.AiSuggestionService; import cn.rosercode.ledgerly.service.AiSuggestionService;
import cn.rosercode.finance.service.AiTagService; import cn.rosercode.ledgerly.service.AiTagService;
import cn.rosercode.finance.service.AiUsageService; import cn.rosercode.ledgerly.service.AiUsageService;
import cn.rosercode.finance.util.ImageUtils; import cn.rosercode.ledgerly.util.ImageUtils;
import cn.rosercode.finance.util.UserContext; import cn.rosercode.ledgerly.util.UserContext;
import cn.rosercode.finance.vo.AiCategoryResultVO; import cn.rosercode.ledgerly.vo.AiCategoryResultVO;
import cn.rosercode.finance.vo.AiChannelResultVO; import cn.rosercode.ledgerly.vo.AiChannelResultVO;
import cn.rosercode.finance.vo.AiConfigVO; import cn.rosercode.ledgerly.vo.AiConfigVO;
import cn.rosercode.finance.vo.AiQueryResultVO; import cn.rosercode.ledgerly.vo.AiQueryResultVO;
import cn.rosercode.finance.vo.AiRecordImageResultVO; import cn.rosercode.ledgerly.vo.AiRecordImageResultVO;
import cn.rosercode.finance.vo.AiRecordResultVO; import cn.rosercode.ledgerly.vo.AiRecordResultVO;
import cn.rosercode.finance.vo.AiRelationResultVO; import cn.rosercode.ledgerly.vo.AiRelationResultVO;
import cn.rosercode.finance.vo.AiRuleSuggestResultVO; import cn.rosercode.ledgerly.vo.AiRuleSuggestResultVO;
import cn.rosercode.finance.vo.AiStatisticsResultVO; import cn.rosercode.ledgerly.vo.AiStatisticsResultVO;
import cn.rosercode.finance.vo.AiSuggestionVO; import cn.rosercode.ledgerly.vo.AiSuggestionVO;
import cn.rosercode.finance.vo.AiTagResultVO; import cn.rosercode.ledgerly.vo.AiTagResultVO;
import cn.rosercode.finance.vo.AiUsageResultVO; import cn.rosercode.ledgerly.vo.AiUsageResultVO;
/** /**
* AI 控制器 * AI 控制器
@@ -1,4 +1,4 @@
package cn.rosercode.finance.controller; package cn.rosercode.ledgerly.controller;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
@@ -8,11 +8,11 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import cn.rosercode.finance.common.Result; import cn.rosercode.ledgerly.common.Result;
import cn.rosercode.finance.config.app.AppConfig; import cn.rosercode.ledgerly.config.app.AppConfig;
import cn.rosercode.finance.config.app.AppConfigStore; import cn.rosercode.ledgerly.config.app.AppConfigStore;
import cn.rosercode.finance.dto.LogRetentionRequest; import cn.rosercode.ledgerly.dto.LogRetentionRequest;
import cn.rosercode.finance.dto.NotificationUrlRequest; import cn.rosercode.ledgerly.dto.NotificationUrlRequest;
/** /**
* 应用配置控制器 * 应用配置控制器
@@ -1,4 +1,4 @@
package cn.rosercode.finance.controller; package cn.rosercode.ledgerly.controller;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
@@ -16,15 +16,15 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import cn.rosercode.finance.common.BusinessException; import cn.rosercode.ledgerly.common.BusinessException;
import cn.rosercode.finance.common.Result; import cn.rosercode.ledgerly.common.Result;
import cn.rosercode.finance.dto.BillImportRequest; import cn.rosercode.ledgerly.dto.BillImportRequest;
import cn.rosercode.finance.enums.BillType; import cn.rosercode.ledgerly.enums.BillType;
import cn.rosercode.finance.service.BillImportService; import cn.rosercode.ledgerly.service.BillImportService;
import cn.rosercode.finance.util.UserContext; import cn.rosercode.ledgerly.util.UserContext;
import cn.rosercode.finance.vo.BillImportResultVO; import cn.rosercode.ledgerly.vo.BillImportResultVO;
import cn.rosercode.finance.vo.BillParseResultVO; import cn.rosercode.ledgerly.vo.BillParseResultVO;
import cn.rosercode.finance.vo.BillTypeVO; import cn.rosercode.ledgerly.vo.BillTypeVO;
/** /**
* 账单导入控制器 * 账单导入控制器
@@ -1,4 +1,4 @@
package cn.rosercode.finance.controller; package cn.rosercode.ledgerly.controller;
import java.util.List; import java.util.List;
@@ -16,12 +16,12 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import cn.rosercode.finance.common.PageResult; import cn.rosercode.ledgerly.common.PageResult;
import cn.rosercode.finance.common.Result; import cn.rosercode.ledgerly.common.Result;
import cn.rosercode.finance.dto.CategoryRequest; import cn.rosercode.ledgerly.dto.CategoryRequest;
import cn.rosercode.finance.service.CategoryService; import cn.rosercode.ledgerly.service.CategoryService;
import cn.rosercode.finance.util.UserContext; import cn.rosercode.ledgerly.util.UserContext;
import cn.rosercode.finance.vo.CategoryVO; import cn.rosercode.ledgerly.vo.CategoryVO;
/** /**
* 分类控制器 * 分类控制器
@@ -1,4 +1,4 @@
package cn.rosercode.finance.controller; package cn.rosercode.ledgerly.controller;
import java.util.List; import java.util.List;
@@ -15,12 +15,12 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import cn.rosercode.finance.common.PageResult; import cn.rosercode.ledgerly.common.PageResult;
import cn.rosercode.finance.common.Result; import cn.rosercode.ledgerly.common.Result;
import cn.rosercode.finance.dto.ChannelRequest; import cn.rosercode.ledgerly.dto.ChannelRequest;
import cn.rosercode.finance.service.ChannelService; import cn.rosercode.ledgerly.service.ChannelService;
import cn.rosercode.finance.util.UserContext; import cn.rosercode.ledgerly.util.UserContext;
import cn.rosercode.finance.vo.ChannelVO; import cn.rosercode.ledgerly.vo.ChannelVO;
/** /**
* 交易渠道控制器 * 交易渠道控制器
@@ -1,4 +1,4 @@
package cn.rosercode.finance.controller; package cn.rosercode.ledgerly.controller;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
@@ -6,10 +6,10 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import cn.rosercode.finance.common.Result; import cn.rosercode.ledgerly.common.Result;
import cn.rosercode.finance.dto.DatabaseConfigRequest; import cn.rosercode.ledgerly.dto.DatabaseConfigRequest;
import cn.rosercode.finance.service.DatabaseService; import cn.rosercode.ledgerly.service.DatabaseService;
import cn.rosercode.finance.vo.DatabaseStatusVO; import cn.rosercode.ledgerly.vo.DatabaseStatusVO;
/** /**
* 数据库配置控制器。 * 数据库配置控制器。
@@ -1,4 +1,4 @@
package cn.rosercode.finance.controller; package cn.rosercode.ledgerly.controller;
import java.util.List; import java.util.List;
@@ -18,23 +18,23 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter; import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
import cn.rosercode.finance.common.PageResult; import cn.rosercode.ledgerly.common.PageResult;
import cn.rosercode.finance.common.Result; import cn.rosercode.ledgerly.common.Result;
import cn.rosercode.finance.dto.BillImportRequest; import cn.rosercode.ledgerly.dto.BillImportRequest;
import cn.rosercode.finance.dto.EmailBillConfigRequest; import cn.rosercode.ledgerly.dto.EmailBillConfigRequest;
import cn.rosercode.finance.dto.EmailBillParseRequest; import cn.rosercode.ledgerly.dto.EmailBillParseRequest;
import cn.rosercode.finance.dto.EmailBillSenderRuleRequest; import cn.rosercode.ledgerly.dto.EmailBillSenderRuleRequest;
import cn.rosercode.finance.email.EmailBillMonitorManager; import cn.rosercode.ledgerly.email.EmailBillMonitorManager;
import cn.rosercode.finance.service.EmailBillCheckStreamService; import cn.rosercode.ledgerly.service.EmailBillCheckStreamService;
import cn.rosercode.finance.service.EmailBillConfigService; import cn.rosercode.ledgerly.service.EmailBillConfigService;
import cn.rosercode.finance.service.EmailBillMessageService; import cn.rosercode.ledgerly.service.EmailBillMessageService;
import cn.rosercode.finance.service.EmailBillSenderRuleService; import cn.rosercode.ledgerly.service.EmailBillSenderRuleService;
import cn.rosercode.finance.util.UserContext; import cn.rosercode.ledgerly.util.UserContext;
import cn.rosercode.finance.vo.BillImportResultVO; import cn.rosercode.ledgerly.vo.BillImportResultVO;
import cn.rosercode.finance.vo.BillParseResultVO; import cn.rosercode.ledgerly.vo.BillParseResultVO;
import cn.rosercode.finance.vo.EmailBillConfigVO; import cn.rosercode.ledgerly.vo.EmailBillConfigVO;
import cn.rosercode.finance.vo.EmailBillMessageVO; import cn.rosercode.ledgerly.vo.EmailBillMessageVO;
import cn.rosercode.finance.vo.EmailBillSenderRuleVO; import cn.rosercode.ledgerly.vo.EmailBillSenderRuleVO;
/** /**
* 邮箱账单控制器 * 邮箱账单控制器
@@ -1,4 +1,4 @@
package cn.rosercode.finance.controller; package cn.rosercode.ledgerly.controller;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
@@ -8,14 +8,14 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter; import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
import cn.rosercode.finance.common.PageResult; import cn.rosercode.ledgerly.common.PageResult;
import cn.rosercode.finance.common.Result; import cn.rosercode.ledgerly.common.Result;
import cn.rosercode.finance.dto.LogQuery; import cn.rosercode.ledgerly.dto.LogQuery;
import cn.rosercode.finance.service.AppLogStreamService; import cn.rosercode.ledgerly.service.AppLogStreamService;
import cn.rosercode.finance.service.LogService; import cn.rosercode.ledgerly.service.LogService;
import cn.rosercode.finance.vo.AppLogVO; import cn.rosercode.ledgerly.vo.AppLogVO;
import cn.rosercode.finance.vo.HttpLogVO; import cn.rosercode.ledgerly.vo.HttpLogVO;
import cn.rosercode.finance.vo.LoginLogVO; import cn.rosercode.ledgerly.vo.LoginLogVO;
/** /**
* 系统日志控制器 * 系统日志控制器
@@ -1,4 +1,4 @@
package cn.rosercode.finance.controller; package cn.rosercode.ledgerly.controller;
import java.util.List; import java.util.List;
@@ -14,16 +14,16 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import cn.rosercode.finance.common.Result; import cn.rosercode.ledgerly.common.Result;
import cn.rosercode.finance.dto.NotificationChannelRequest; import cn.rosercode.ledgerly.dto.NotificationChannelRequest;
import cn.rosercode.finance.dto.NotificationConfigRequest; import cn.rosercode.ledgerly.dto.NotificationConfigRequest;
import cn.rosercode.finance.service.NotificationChannelService; import cn.rosercode.ledgerly.service.NotificationChannelService;
import cn.rosercode.finance.service.NotificationConfigService; import cn.rosercode.ledgerly.service.NotificationConfigService;
import cn.rosercode.finance.service.NotificationService; import cn.rosercode.ledgerly.service.NotificationService;
import cn.rosercode.finance.util.UserContext; import cn.rosercode.ledgerly.util.UserContext;
import cn.rosercode.finance.vo.NotificationChannelVO; import cn.rosercode.ledgerly.vo.NotificationChannelVO;
import cn.rosercode.finance.vo.NotificationConfigVO; import cn.rosercode.ledgerly.vo.NotificationConfigVO;
import cn.rosercode.finance.vo.NotificationLogVO; import cn.rosercode.ledgerly.vo.NotificationLogVO;
/** /**
* 通知控制器 * 通知控制器
@@ -1,4 +1,4 @@
package cn.rosercode.finance.controller; package cn.rosercode.ledgerly.controller;
import java.util.List; import java.util.List;
@@ -16,14 +16,14 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import cn.rosercode.finance.common.PageResult; import cn.rosercode.ledgerly.common.PageResult;
import cn.rosercode.finance.common.Result; import cn.rosercode.ledgerly.common.Result;
import cn.rosercode.finance.dto.BatchDeleteRequest; import cn.rosercode.ledgerly.dto.BatchDeleteRequest;
import cn.rosercode.finance.dto.RuleQuery; import cn.rosercode.ledgerly.dto.RuleQuery;
import cn.rosercode.finance.dto.RuleRequest; import cn.rosercode.ledgerly.dto.RuleRequest;
import cn.rosercode.finance.service.RuleService; import cn.rosercode.ledgerly.service.RuleService;
import cn.rosercode.finance.util.UserContext; import cn.rosercode.ledgerly.util.UserContext;
import cn.rosercode.finance.vo.RuleVO; import cn.rosercode.ledgerly.vo.RuleVO;
/** /**
* 规则控制器 * 规则控制器
@@ -1,4 +1,4 @@
package cn.rosercode.finance.controller; package cn.rosercode.ledgerly.controller;
import java.util.List; import java.util.List;
@@ -11,17 +11,17 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import cn.rosercode.finance.common.Result; import cn.rosercode.ledgerly.common.Result;
import cn.rosercode.finance.dto.StatisticsQuery; import cn.rosercode.ledgerly.dto.StatisticsQuery;
import cn.rosercode.finance.dto.StatisticsRangeQuery; import cn.rosercode.ledgerly.dto.StatisticsRangeQuery;
import cn.rosercode.finance.enums.StatisticsDimension; import cn.rosercode.ledgerly.enums.StatisticsDimension;
import cn.rosercode.finance.service.StatisticsService; import cn.rosercode.ledgerly.service.StatisticsService;
import cn.rosercode.finance.util.UserContext; import cn.rosercode.ledgerly.util.UserContext;
import cn.rosercode.finance.vo.CategoryStatisticsVO; import cn.rosercode.ledgerly.vo.CategoryStatisticsVO;
import cn.rosercode.finance.vo.MonthlyStatisticsVO; import cn.rosercode.ledgerly.vo.MonthlyStatisticsVO;
import cn.rosercode.finance.vo.StatisticsGroupVO; import cn.rosercode.ledgerly.vo.StatisticsGroupVO;
import cn.rosercode.finance.vo.StatisticsSummaryVO; import cn.rosercode.ledgerly.vo.StatisticsSummaryVO;
import cn.rosercode.finance.vo.TrendStatisticsVO; import cn.rosercode.ledgerly.vo.TrendStatisticsVO;
/** /**
* 统计控制器 * 统计控制器
@@ -1,4 +1,4 @@
package cn.rosercode.finance.controller; package cn.rosercode.ledgerly.controller;
import java.util.List; import java.util.List;
@@ -16,12 +16,12 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import cn.rosercode.finance.common.PageResult; import cn.rosercode.ledgerly.common.PageResult;
import cn.rosercode.finance.common.Result; import cn.rosercode.ledgerly.common.Result;
import cn.rosercode.finance.dto.TagRequest; import cn.rosercode.ledgerly.dto.TagRequest;
import cn.rosercode.finance.service.TagService; import cn.rosercode.ledgerly.service.TagService;
import cn.rosercode.finance.util.UserContext; import cn.rosercode.ledgerly.util.UserContext;
import cn.rosercode.finance.vo.TagVO; import cn.rosercode.ledgerly.vo.TagVO;
/** /**
* 标签控制器 * 标签控制器
@@ -1,4 +1,4 @@
package cn.rosercode.finance.controller; package cn.rosercode.ledgerly.controller;
import java.io.IOException; import java.io.IOException;
import java.net.URLEncoder; import java.net.URLEncoder;
@@ -28,21 +28,21 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import cn.rosercode.finance.common.PageResult; import cn.rosercode.ledgerly.common.PageResult;
import cn.rosercode.finance.common.Result; import cn.rosercode.ledgerly.common.Result;
import cn.rosercode.finance.dto.BatchCategoryRequest; import cn.rosercode.ledgerly.dto.BatchCategoryRequest;
import cn.rosercode.finance.dto.BatchCreateTransactionRequest; import cn.rosercode.ledgerly.dto.BatchCreateTransactionRequest;
import cn.rosercode.finance.dto.BatchDeleteRequest; import cn.rosercode.ledgerly.dto.BatchDeleteRequest;
import cn.rosercode.finance.dto.BatchTagRequest; import cn.rosercode.ledgerly.dto.BatchTagRequest;
import cn.rosercode.finance.dto.TransactionQuery; import cn.rosercode.ledgerly.dto.TransactionQuery;
import cn.rosercode.finance.dto.TransactionRequest; import cn.rosercode.ledgerly.dto.TransactionRequest;
import cn.rosercode.finance.exporter.TransactionExportSheetHandler; import cn.rosercode.ledgerly.exporter.TransactionExportSheetHandler;
import cn.rosercode.finance.service.ChannelService; import cn.rosercode.ledgerly.service.ChannelService;
import cn.rosercode.finance.service.TransactionService; import cn.rosercode.ledgerly.service.TransactionService;
import cn.rosercode.finance.util.UserContext; import cn.rosercode.ledgerly.util.UserContext;
import cn.rosercode.finance.vo.ChannelOptionVO; import cn.rosercode.ledgerly.vo.ChannelOptionVO;
import cn.rosercode.finance.vo.TransactionExportVO; import cn.rosercode.ledgerly.vo.TransactionExportVO;
import cn.rosercode.finance.vo.TransactionVO; import cn.rosercode.ledgerly.vo.TransactionVO;
/** /**
* 交易记录控制器 * 交易记录控制器
@@ -1,4 +1,4 @@
package cn.rosercode.finance.controller; package cn.rosercode.ledgerly.controller;
import java.util.List; import java.util.List;
@@ -16,11 +16,11 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import cn.rosercode.finance.common.Result; import cn.rosercode.ledgerly.common.Result;
import cn.rosercode.finance.dto.TransactionGroupRequest; import cn.rosercode.ledgerly.dto.TransactionGroupRequest;
import cn.rosercode.finance.service.TransactionGroupService; import cn.rosercode.ledgerly.service.TransactionGroupService;
import cn.rosercode.finance.util.UserContext; import cn.rosercode.ledgerly.util.UserContext;
import cn.rosercode.finance.vo.TransactionGroupVO; import cn.rosercode.ledgerly.vo.TransactionGroupVO;
/** /**
* 账单关系组控制器 * 账单关系组控制器
@@ -1,4 +1,4 @@
package cn.rosercode.finance.controller; package cn.rosercode.ledgerly.controller;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
@@ -10,17 +10,17 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import cn.rosercode.finance.common.Result; import cn.rosercode.ledgerly.common.Result;
import cn.rosercode.finance.dto.ChangePasswordRequest; import cn.rosercode.ledgerly.dto.ChangePasswordRequest;
import cn.rosercode.finance.dto.LoginRequest; import cn.rosercode.ledgerly.dto.LoginRequest;
import cn.rosercode.finance.dto.RegisterRequest; import cn.rosercode.ledgerly.dto.RegisterRequest;
import cn.rosercode.finance.dto.RegistrationUpdateRequest; import cn.rosercode.ledgerly.dto.RegistrationUpdateRequest;
import cn.rosercode.finance.service.RegistrationService; import cn.rosercode.ledgerly.service.RegistrationService;
import cn.rosercode.finance.service.UserService; import cn.rosercode.ledgerly.service.UserService;
import cn.rosercode.finance.util.UserContext; import cn.rosercode.ledgerly.util.UserContext;
import cn.rosercode.finance.vo.LoginVO; import cn.rosercode.ledgerly.vo.LoginVO;
import cn.rosercode.finance.vo.RegistrationStatusVO; import cn.rosercode.ledgerly.vo.RegistrationStatusVO;
import cn.rosercode.finance.vo.UserVO; import cn.rosercode.ledgerly.vo.UserVO;
/** /**
* 用户控制器 * 用户控制器
@@ -1,4 +1,4 @@
package cn.rosercode.finance.controller; package cn.rosercode.ledgerly.controller;
import java.util.Map; import java.util.Map;
@@ -10,14 +10,14 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import cn.rosercode.finance.common.Result; import cn.rosercode.ledgerly.common.Result;
import cn.rosercode.finance.dto.BillSourceStatsRequest; import cn.rosercode.ledgerly.dto.BillSourceStatsRequest;
import cn.rosercode.finance.dto.ExcludedDisplayStyleRequest; import cn.rosercode.ledgerly.dto.ExcludedDisplayStyleRequest;
import cn.rosercode.finance.dto.PaginationPrefsRequest; import cn.rosercode.ledgerly.dto.PaginationPrefsRequest;
import cn.rosercode.finance.dto.ShowHiddenDataRequest; import cn.rosercode.ledgerly.dto.ShowHiddenDataRequest;
import cn.rosercode.finance.service.UserPreferenceService; import cn.rosercode.ledgerly.service.UserPreferenceService;
import cn.rosercode.finance.util.UserContext; import cn.rosercode.ledgerly.util.UserContext;
import cn.rosercode.finance.vo.PaginationPrefsVO; import cn.rosercode.ledgerly.vo.PaginationPrefsVO;
/** /**
* 用户设置控制器 * 用户设置控制器
@@ -1,4 +1,4 @@
package cn.rosercode.finance.converter; package cn.rosercode.ledgerly.converter;
import java.util.List; import java.util.List;
@@ -6,36 +6,36 @@ import org.mapstruct.Mapper;
import org.mapstruct.Mapping; import org.mapstruct.Mapping;
import org.mapstruct.ReportingPolicy; import org.mapstruct.ReportingPolicy;
import cn.rosercode.finance.entity.AiUsage; import cn.rosercode.ledgerly.entity.AiUsage;
import cn.rosercode.finance.entity.Category; import cn.rosercode.ledgerly.entity.Category;
import cn.rosercode.finance.entity.EmailBillConfig; import cn.rosercode.ledgerly.entity.EmailBillConfig;
import cn.rosercode.finance.entity.EmailBillMessage; import cn.rosercode.ledgerly.entity.EmailBillMessage;
import cn.rosercode.finance.entity.EmailBillSenderRule; import cn.rosercode.ledgerly.entity.EmailBillSenderRule;
import cn.rosercode.finance.entity.HttpLog; import cn.rosercode.ledgerly.entity.HttpLog;
import cn.rosercode.finance.entity.LoginLog; import cn.rosercode.ledgerly.entity.LoginLog;
import cn.rosercode.finance.entity.NotificationChannel; import cn.rosercode.ledgerly.entity.NotificationChannel;
import cn.rosercode.finance.entity.NotificationLog; import cn.rosercode.ledgerly.entity.NotificationLog;
import cn.rosercode.finance.entity.Rule; import cn.rosercode.ledgerly.entity.Rule;
import cn.rosercode.finance.entity.Tag; import cn.rosercode.ledgerly.entity.Tag;
import cn.rosercode.finance.entity.Transaction; import cn.rosercode.ledgerly.entity.Transaction;
import cn.rosercode.finance.entity.TransactionGroup; import cn.rosercode.ledgerly.entity.TransactionGroup;
import cn.rosercode.finance.entity.TransactionGroupItem; import cn.rosercode.ledgerly.entity.TransactionGroupItem;
import cn.rosercode.finance.entity.User; import cn.rosercode.ledgerly.entity.User;
import cn.rosercode.finance.vo.AiUsageVO; import cn.rosercode.ledgerly.vo.AiUsageVO;
import cn.rosercode.finance.vo.CategoryVO; import cn.rosercode.ledgerly.vo.CategoryVO;
import cn.rosercode.finance.vo.EmailBillConfigVO; import cn.rosercode.ledgerly.vo.EmailBillConfigVO;
import cn.rosercode.finance.vo.EmailBillMessageVO; import cn.rosercode.ledgerly.vo.EmailBillMessageVO;
import cn.rosercode.finance.vo.EmailBillSenderRuleVO; import cn.rosercode.ledgerly.vo.EmailBillSenderRuleVO;
import cn.rosercode.finance.vo.HttpLogVO; import cn.rosercode.ledgerly.vo.HttpLogVO;
import cn.rosercode.finance.vo.LoginLogVO; import cn.rosercode.ledgerly.vo.LoginLogVO;
import cn.rosercode.finance.vo.NotificationChannelVO; import cn.rosercode.ledgerly.vo.NotificationChannelVO;
import cn.rosercode.finance.vo.NotificationLogVO; import cn.rosercode.ledgerly.vo.NotificationLogVO;
import cn.rosercode.finance.vo.RuleVO; import cn.rosercode.ledgerly.vo.RuleVO;
import cn.rosercode.finance.vo.TagVO; import cn.rosercode.ledgerly.vo.TagVO;
import cn.rosercode.finance.vo.TransactionGroupItemVO; import cn.rosercode.ledgerly.vo.TransactionGroupItemVO;
import cn.rosercode.finance.vo.TransactionGroupVO; import cn.rosercode.ledgerly.vo.TransactionGroupVO;
import cn.rosercode.finance.vo.TransactionVO; import cn.rosercode.ledgerly.vo.TransactionVO;
import cn.rosercode.finance.vo.UserVO; import cn.rosercode.ledgerly.vo.UserVO;
/** /**
* 实体与视图对象之间的转换器,由 MapStruct 在编译期生成实现。 * 实体与视图对象之间的转换器,由 MapStruct 在编译期生成实现。
@@ -1,4 +1,4 @@
package cn.rosercode.finance.dto; package cn.rosercode.ledgerly.dto;
import java.util.List; import java.util.List;
@@ -7,7 +7,7 @@ import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.Data; import lombok.Data;
import cn.rosercode.finance.vo.AiNewTagVO; import cn.rosercode.ledgerly.vo.AiNewTagVO;
/** /**
* AI 建议应用请求DTO,携带逐条记录的建议分类与标签,用于一键写入。 * AI 建议应用请求DTO,携带逐条记录的建议分类与标签,用于一键写入。
@@ -1,4 +1,4 @@
package cn.rosercode.finance.dto; package cn.rosercode.ledgerly.dto;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import lombok.Data; import lombok.Data;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.dto; package cn.rosercode.ledgerly.dto;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import lombok.Data; import lombok.Data;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.dto; package cn.rosercode.ledgerly.dto;
import lombok.Data; import lombok.Data;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.dto; package cn.rosercode.ledgerly.dto;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import lombok.Data; import lombok.Data;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.dto; package cn.rosercode.ledgerly.dto;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import lombok.Data; import lombok.Data;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.dto; package cn.rosercode.ledgerly.dto;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import lombok.Data; import lombok.Data;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.dto; package cn.rosercode.ledgerly.dto;
import lombok.Data; import lombok.Data;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.dto; package cn.rosercode.ledgerly.dto;
import java.util.List; import java.util.List;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.dto; package cn.rosercode.ledgerly.dto;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List; import java.util.List;
@@ -6,7 +6,7 @@ import java.util.List;
import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotEmpty;
import lombok.Data; import lombok.Data;
import cn.rosercode.finance.vo.AiNewTagVO; import cn.rosercode.ledgerly.vo.AiNewTagVO;
/** /**
* AI 生成规则的批量创建请求。 * AI 生成规则的批量创建请求。
@@ -1,4 +1,4 @@
package cn.rosercode.finance.dto; package cn.rosercode.ledgerly.dto;
import java.util.List; import java.util.List;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.dto; package cn.rosercode.ledgerly.dto;
import java.math.BigDecimal; import java.math.BigDecimal;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.dto; package cn.rosercode.ledgerly.dto;
import java.util.List; import java.util.List;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.dto; package cn.rosercode.ledgerly.dto;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import lombok.Data; import lombok.Data;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.dto; package cn.rosercode.ledgerly.dto;
import java.util.List; import java.util.List;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.dto; package cn.rosercode.ledgerly.dto;
import java.util.List; import java.util.List;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.dto; package cn.rosercode.ledgerly.dto;
import java.util.List; import java.util.List;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.dto; package cn.rosercode.ledgerly.dto;
import java.util.List; import java.util.List;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.dto; package cn.rosercode.ledgerly.dto;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.dto; package cn.rosercode.ledgerly.dto;
import java.util.Map; import java.util.Map;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.dto; package cn.rosercode.ledgerly.dto;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import lombok.Data; import lombok.Data;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.dto; package cn.rosercode.ledgerly.dto;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size; import jakarta.validation.constraints.Size;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.dto; package cn.rosercode.ledgerly.dto;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size; import jakarta.validation.constraints.Size;
@@ -1,8 +1,8 @@
package cn.rosercode.finance.dto; package cn.rosercode.ledgerly.dto;
import lombok.Data; import lombok.Data;
import cn.rosercode.finance.config.datasource.DataSourceType; import cn.rosercode.ledgerly.config.datasource.DataSourceType;
/** /**
* 数据库配置请求对象,用于提交 MySQL 或 SQLite 的连接信息。 * 数据库配置请求对象,用于提交 MySQL 或 SQLite 的连接信息。
@@ -1,4 +1,4 @@
package cn.rosercode.finance.dto; package cn.rosercode.ledgerly.dto;
import java.util.List; import java.util.List;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.dto; package cn.rosercode.ledgerly.dto;
import lombok.Data; import lombok.Data;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.dto; package cn.rosercode.ledgerly.dto;
import java.util.List; import java.util.List;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.dto; package cn.rosercode.ledgerly.dto;
import lombok.Data; import lombok.Data;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.dto; package cn.rosercode.ledgerly.dto;
import lombok.Data; import lombok.Data;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.dto; package cn.rosercode.ledgerly.dto;
import lombok.Data; import lombok.Data;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.dto; package cn.rosercode.ledgerly.dto;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size; import jakarta.validation.constraints.Size;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.dto; package cn.rosercode.ledgerly.dto;
import java.util.Map; import java.util.Map;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.dto; package cn.rosercode.ledgerly.dto;
import lombok.Data; import lombok.Data;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.dto; package cn.rosercode.ledgerly.dto;
import lombok.Data; import lombok.Data;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.dto; package cn.rosercode.ledgerly.dto;
import java.util.List; import java.util.List;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.dto; package cn.rosercode.ledgerly.dto;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size; import jakarta.validation.constraints.Size;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.dto; package cn.rosercode.ledgerly.dto;
import lombok.Data; import lombok.Data;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.dto; package cn.rosercode.ledgerly.dto;
import lombok.Data; import lombok.Data;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.dto; package cn.rosercode.ledgerly.dto;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List; import java.util.List;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.dto; package cn.rosercode.ledgerly.dto;
import lombok.Data; import lombok.Data;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.dto; package cn.rosercode.ledgerly.dto;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.Data; import lombok.Data;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.dto; package cn.rosercode.ledgerly.dto;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List; import java.util.List;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.dto; package cn.rosercode.ledgerly.dto;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import lombok.Data; import lombok.Data;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.dto; package cn.rosercode.ledgerly.dto;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.Data; import lombok.Data;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.dto; package cn.rosercode.ledgerly.dto;
import java.util.List; import java.util.List;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.dto; package cn.rosercode.ledgerly.dto;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List; import java.util.List;
@@ -1,4 +1,4 @@
package cn.rosercode.finance.dto; package cn.rosercode.ledgerly.dto;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;

Some files were not shown because too many files have changed in this diff Show More