From f5292ffa19c038fa43c16af37aecabbca50e3e10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E5=AE=B6=E8=AE=AD?= Date: Mon, 8 Jun 2026 17:53:41 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BA=86=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mybatis/export/MyBatisExportService.java | 4 - .../system/config/WorkUtilsProperties.java | 86 +++---------------- 项目目录结构说明.md | 40 ++++----- 3 files changed, 34 insertions(+), 96 deletions(-) diff --git a/src/main/java/com/example/workutils/biz/mybatis/export/MyBatisExportService.java b/src/main/java/com/example/workutils/biz/mybatis/export/MyBatisExportService.java index 4a41536..4a80ce8 100644 --- a/src/main/java/com/example/workutils/biz/mybatis/export/MyBatisExportService.java +++ b/src/main/java/com/example/workutils/biz/mybatis/export/MyBatisExportService.java @@ -1,7 +1,6 @@ package com.example.workutils.biz.mybatis.export; import com.example.workutils.biz.scanner.config.ScanConfigBO; -import com.example.workutils.system.config.WorkUtilsProperties; import com.example.workutils.biz.mybatis.model.MybatisTagBO; import com.example.workutils.biz.output.OutputService; import com.example.workutils.biz.scanner.service.FileOperationService; @@ -36,9 +35,6 @@ public class MyBatisExportService { @Autowired private OutputService outputService; - @Autowired - private WorkUtilsProperties properties; - // ==================== 常量定义 ==================== /** SQL标签类型 */ diff --git a/src/main/java/com/example/workutils/system/config/WorkUtilsProperties.java b/src/main/java/com/example/workutils/system/config/WorkUtilsProperties.java index bf452a8..6c914ed 100644 --- a/src/main/java/com/example/workutils/system/config/WorkUtilsProperties.java +++ b/src/main/java/com/example/workutils/system/config/WorkUtilsProperties.java @@ -12,8 +12,7 @@ import java.time.format.DateTimeFormatter; import java.util.List; /** - * 工具集配置属性 - * 绑定application.yml或application.properties中以workutils为前缀的配置项 + * 工具集配置属性(配置项在 application.yml 中定义) * * @author system * @version 1.0 @@ -23,108 +22,51 @@ import java.util.List; @Data public class WorkUtilsProperties { - /** 基础目录,默认为D:/workspace/workutils */ - private String baseDirectory = "D:/workspace/workutils"; + /** 基础目录 */ + private String baseDirectory; /** 配置文件目录,相对于基础目录 */ - private String configDirectory = "src/main/resources/config"; + private String configDirectory; /** 导出文件根目录 */ - private String exportDirectory = "D:/workspace/workutils/export"; + private String exportDirectory; /** 项目路径配置文件名 */ - private String projectPathsFile = "代码仓库项目路径.txt"; + private String projectPathsFile; /** 工具启用/禁用配置 */ private ToolsConfig tools; - /** 日期格式:yyyyMMdd */ - private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMdd"); + // ==================== 路径解析方法 ==================== - /** 时间格式:yyyyMMddHHmmss */ - private static final DateTimeFormatter TIMESTAMP_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMddHHmmss"); - - /** - * 获取项目路径配置文件的完整路径 - * - * @return 项目路径配置文件路径 - */ public Path getProjectPathsFilePath() { return Paths.get(baseDirectory, configDirectory, projectPathsFile); } - /** - * 获取导出根目录 - * - * @return 导出根目录路径 - */ public Path getExportBasePath() { return Paths.get(exportDirectory); } - /** - * 获取当天的导出目录 - * 格式:导出根目录/yyyyMMdd/ - * - * @return 当天日期目录路径 - */ public Path getTodayExportPath() { - String dateDir = LocalDate.now().format(DATE_FORMATTER); - return getExportBasePath().resolve(dateDir); + return getExportBasePath().resolve(LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"))); } - /** - * 生成带时间戳的导出文件名 - * 格式:prefix_yyyyMMddHHmmss.extension - * - * @param prefix 文件名前缀 - * @param extension 文件扩展名 - * @return 带时间戳的文件名 - */ - public String generateExportFileName(String prefix, String extension) { - String timestamp = LocalDateTime.now().format(TIMESTAMP_FORMATTER); - return String.format("%s_%s.%s", prefix, timestamp, extension); - } - - /** - * 解析导出文件的完整路径 - * 格式:导出根目录/yyyyMMdd/prefix_yyyyMMddHHmmss.extension - * - * @param fileName 文件名 - * @return 文件的完整路径 - */ public Path resolveExportPath(String fileName) { return getTodayExportPath().resolve(fileName); } - /** - * 解析导出文件的完整路径(带时间戳) - * 格式:导出根目录/yyyyMMdd/prefix_yyyyMMddHHmmss.extension - * - * @param prefix 文件名前缀 - * @param extension 文件扩展名 - * @return 文件的完整路径 - */ public Path resolveExportPath(String prefix, String extension) { - String fileName = generateExportFileName(prefix, extension); - return getTodayExportPath().resolve(fileName); + String timestamp = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + return resolveExportPath(String.format("%s_%s.%s", prefix, timestamp, extension)); } - /** - * 工具启用/禁用配置 - */ + // ==================== 内部配置类 ==================== + @Data public static class ToolsConfig { - /** - * 启用的工具ID列表,设置后仅加载这些工具 - * 示例: ["scan", "mybatis", "batch", "git-health", "mybatis-generator"] - */ + /** 启用的工具ID列表(白名单),设置后仅加载这些工具 */ private List enabled; - - /** - * 禁用的工具ID列表,设置后排除这些工具 - * enabled优先级高于disabled - */ + /** 禁用的工具ID列表(黑名单),enabled优先级高于disabled */ private List disabled; } } diff --git a/项目目录结构说明.md b/项目目录结构说明.md index ee5c331..8f3d575 100644 --- a/项目目录结构说明.md +++ b/项目目录结构说明.md @@ -38,17 +38,17 @@ workutils/ ``` src/main/java/com/example/workutils/ ├── WorkUtilsApplication.java # 应用启动入口 -├── config/ -│ └── WorkUtilsProperties.java # 全局配置属性类 -├── tool/ -│ ├── Tool.java # 工具策略接口 -│ ├── AbstractTool.java # 工具基类(模板方法模式) -│ ├── ToolRegistry.java # 工具注册中心 -│ └── ConsoleHelper.java # 控制台交互工具类(消除重复I/O代码) -├── menu/ -│ └── api/ -│ └── MenuRunner.java # 交互式菜单运行器 -└── biz/ +├── system/ # 系统框架层 +│ ├── ConsoleHelper.java # 控制台交互工具类(消除重复I/O代码) +│ ├── config/ +│ │ └── WorkUtilsProperties.java # 全局配置属性类 +│ ├── menu/ +│ │ └── MenuRunner.java # 交互式菜单运行器 +│ └── tool/ +│ ├── Tool.java # 工具策略接口 +│ ├── AbstractTool.java # 工具基类(模板方法模式) +│ └── ToolRegistry.java # 工具注册中心 +└── biz/ # 业务模块层 ├── git/ # Git操作业务模块 │ ├── config/ │ │ └── GitOptimizationConfig.java # Git性能优化配置 @@ -112,22 +112,22 @@ src/main/java/com/example/workutils/ - 支持命令行模式,通过 `ToolRegistry.getToolByCommand()` 按命令名分发到对应 Tool - 不依赖任何具体业务 Service,完全解耦 -#### `WorkUtilsProperties.java` +--- + +### 3.2 系统框架层(`system/`) + +#### `config/WorkUtilsProperties.java` - **作用**: 全局配置属性类,绑定 `application.yml` 中 `workutils` 前缀的配置 - **功能**: - 管理基础目录、配置目录、导出目录路径 - 提供带日期时间戳的导出文件路径生成 - 管理工具启用/禁用白名单和黑名单 ---- - -### 3.2 工具框架层(`tool/`) - -#### `Tool.java` +#### `tool/Tool.java` - **作用**: 工具策略接口,所有可插拔工具需实现此接口 - **核心方法**: `getId()`、`getName()`、`getMenuOptions()`、`execute()`、`getCommandName()`(命令行模式命令名)、`executeCommand()`(命令行模式执行) -#### `AbstractTool.java` +#### `tool/AbstractTool.java` - **作用**: 工具基类,使用模板方法模式 - **功能**: 提供标准菜单交互循环(显示菜单→读取选择→处理选择→循环),子类只需实现 `handleChoice()` - **控制台I/O**: 委托给 `ConsoleHelper`,子类通过 `printMenuTitle()`、`displayMenu()` 等 protected 方法间接调用 @@ -136,13 +136,13 @@ src/main/java/com/example/workutils/ - **作用**: 控制台交互工具类(静态方法) - **功能**: 统一 `MenuRunner` 和 `AbstractTool` 中重复的控制台 I/O 方法,消除代码重复 -#### `ToolRegistry.java` +#### `tool/ToolRegistry.java` - **作用**: 工具注册中心,Spring 自动发现 `Tool` Bean - **功能**: 根据配置过滤启用/禁用工具,支持白名单(enabled)和黑名单(disabled)模式,同时维护按命令名(`getCommandName()`)的索引,支持命令行模式按命令名分发 --- -### 3.3 菜单层(`menu/`) +### 3.3 菜单层(`system/menu/`) #### `MenuRunner.java` - **作用**: 交互式主菜单运行器