From 4d7979c83c4129ea9340395c3836816a482e1537 Mon Sep 17 00:00:00 2001 From: Odboy Date: Tue, 15 Jul 2025 20:40:41 +0800 Subject: [PATCH] =?UTF-8?q?refactor(cutejava-framework):=E9=87=8D=E6=9E=84?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E5=9F=BA=E7=A1=80=E6=A1=86=E6=9E=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 优化了多个类的代码结构和注释 - 添加了新的工具类和配置类 - 调整了部分功能实现方式 - 统一了代码格式和命名规范 - 删除了七牛云存储 - 新增了Minio存储 --- cutejava-front/package.json | 3 +- cutejava-front/src/api/system/ossStorage.js | 19 + cutejava-front/src/store/getters.js | 2 +- cutejava-front/src/store/modules/api.js | 4 +- .../src/views/system/storage/index.vue | 16 +- .../src/views/system/storage/oss/index.vue | 197 +++++++++ .../src/views/system/storage/qiniu/form.vue | 98 ----- .../src/views/system/storage/qiniu/index.vue | 189 --------- cutejava/README.md | 5 +- .../annotation/AnonymousDeleteMapping.java | 1 - .../framework/context/CsScriptHelper.java | 4 +- .../framework/context/SpringBeanHolder.java | 4 +- .../cn/odboy/framework/doc/SwaggerConfig.java | 11 +- .../handler/GlobalExceptionHandler.java | 2 - .../mybatisplus/config/MybatisPlusConfig.java | 2 +- .../mybatisplus/core/CsMpCmdGenUtil.java | 52 ++- .../framework/mybatisplus/core/CsMpQUtil.java | 2 +- .../core/interfaces/CsMpServiceImpl.java | 2 +- .../framework/properties/AppProperties.java | 2 + .../properties/model/CaptchaModel.java | 14 + .../model/ContentRsaEncodeSettingModel.java | 7 +- .../properties/model/JwtAuthSettingModel.java | 3 +- .../properties/model/OSSConfigModel.java | 26 ++ .../properties/model/StorageOSSModel.java | 14 + .../model/SwaggerApiDocSettingModel.java | 5 +- .../model/ThreadPoolSettingModel.java | 3 +- .../model/UserLoginCaptchaSettingModel.java | 5 +- .../model/UserLoginSettingModel.java | 3 +- .../framework/quartz/config/QuartzConfig.java | 2 +- .../framework/redis/RedisConfiguration.java | 4 +- .../cn/odboy/framework/redis/RedisHelper.java | 6 +- .../server/config/AsyncTheadPoolConfig.java | 4 +- .../server/core/ConfigurerAdapter.java | 14 +- .../server/core/FileUploadPathHelper.java | 5 - .../websocket/context/CsWsServer.java | 4 +- .../websocket/context/WsClientManager.java | 4 +- .../java/cn/odboy/util/BigDecimalUtil.java | 6 +- .../main/java/cn/odboy/util/CloseUtil.java | 2 +- .../main/java/cn/odboy/util/CsDateUtil.java | 37 ++ .../cn/odboy/util/CsDistributedIdUtil.java | 6 +- .../main/java/cn/odboy/util/CsListUtil.java | 4 +- .../src/main/java/cn/odboy/util/FileUtil.java | 12 +- .../src/main/java/cn/odboy/util/IpUtil.java | 4 +- .../java/cn/odboy/util/RsaEncryptUtil.java | 4 +- cutejava/cutejava-module-system/pom.xml | 6 + .../controller/SystemAuthController.java | 14 +- .../controller/SystemCaptchaController.java | 2 +- .../controller/SystemDeptController.java | 16 +- .../controller/SystemDictController.java | 14 +- .../SystemDictDetailController.java | 14 +- .../controller/SystemEmailController.java | 4 +- .../controller/SystemJobController.java | 14 +- .../SystemLocalStorageController.java | 12 +- .../controller/SystemMenuController.java | 24 +- .../SystemOssStorageController.java | 228 ++++++++++ .../controller/SystemQiniuController.java | 106 ----- .../controller/SystemQuartzJobController.java | 24 +- .../controller/SystemRoleController.java | 22 +- .../controller/SystemUserController.java | 36 +- .../dal/dataobject/SystemOssStorageTb.java | 65 +++ .../dal/dataobject/SystemQiniuConfigTb.java | 53 --- .../dal/dataobject/SystemQiniuContentTb.java | 45 -- .../dal/model/QuerySystemQiniuArgs.java | 24 -- ...eptArgs.java => SystemCreateDeptArgs.java} | 2 +- ...ictArgs.java => SystemCreateDictArgs.java} | 2 +- ...s.java => SystemCreateDictDetailArgs.java} | 2 +- ...mJobArgs.java => SystemCreateJobArgs.java} | 2 +- ...oleArgs.java => SystemCreateRoleArgs.java} | 2 +- .../system/dal/model/SystemOssStorageVo.java | 11 + ...DeptArgs.java => SystemQueryDeptArgs.java} | 2 +- ...DictArgs.java => SystemQueryDictArgs.java} | 2 +- ...gs.java => SystemQueryDictDetailArgs.java} | 2 +- ...emJobArgs.java => SystemQueryJobArgs.java} | 2 +- ...MenuArgs.java => SystemQueryMenuArgs.java} | 2 +- ...rgs.java => SystemQueryQuartzJobArgs.java} | 2 +- ...RoleArgs.java => SystemQueryRoleArgs.java} | 2 +- ...eArgs.java => SystemQueryStorageArgs.java} | 2 +- ...UserArgs.java => SystemQueryUserArgs.java} | 2 +- ...mailArgs.java => SystemSendEmailArgs.java} | 2 +- ...gs.java => SystemUpdateQuartzJobArgs.java} | 2 +- ...java => SystemUpdateUserPasswordArgs.java} | 2 +- .../system/dal/mysql/SystemDeptMapper.java | 4 +- .../dal/mysql/SystemDictDetailMapper.java | 6 +- .../system/dal/mysql/SystemDictMapper.java | 6 +- .../system/dal/mysql/SystemJobMapper.java | 4 +- .../dal/mysql/SystemLocalStorageMapper.java | 4 +- .../system/dal/mysql/SystemMenuMapper.java | 4 +- .../dal/mysql/SystemOssStorageMapper.java | 24 ++ .../dal/mysql/SystemQiniuConfigMapper.java | 15 - .../dal/mysql/SystemQiniuContentMapper.java | 21 - .../dal/mysql/SystemQuartzJobMapper.java | 4 +- .../dal/mysql/SystemQuartzLogMapper.java | 4 +- .../system/dal/mysql/SystemRoleMapper.java | 6 +- .../system/dal/mysql/SystemUserMapper.java | 6 +- .../system/dal/redis/SystemUserInfoDAO.java | 2 +- .../dal/redis/SystemUserOnlineInfoDAO.java | 4 +- .../mybatisplus/MpMetaObjectHandler.java | 6 +- .../permission/config/AuthorityConfig.java | 4 +- ...urityHelper.java => CsSecurityHelper.java} | 2 +- .../core/handler/TokenProvider.java | 4 +- .../core/handler/UserDetailsHandler.java | 2 +- .../framework/quartz/ExecutionJobBean.java | 12 +- .../system/framework/quartz/QuartzManage.java | 2 +- .../storage/OssStorageConfiguration.java | 28 ++ .../storage/local}/MultipartConfig.java | 11 +- .../storage/minio/MinioRepository.java | 392 ++++++++++++++++++ .../java/cn/odboy/system/job/TestTask.java | 2 +- .../system/service/SystemDeptService.java | 22 +- .../service/SystemDictDetailService.java | 10 +- .../system/service/SystemDictService.java | 14 +- .../system/service/SystemEmailService.java | 22 +- .../system/service/SystemJobService.java | 14 +- .../service/SystemLocalStorageService.java | 17 +- .../system/service/SystemMenuService.java | 14 +- .../system/service/SystemMonitorService.java | 2 +- .../service/SystemOssStorageService.java | 33 ++ .../service/SystemQiniuConfigService.java | 52 --- .../service/SystemQiniuContentService.java | 239 ----------- .../service/SystemQuartzJobService.java | 24 +- .../system/service/SystemRoleService.java | 18 +- .../system/service/SystemUserService.java | 20 +- .../impl/SystemOssStorageServiceImpl.java | 101 +++++ .../java/cn/odboy/system/util/QiniuUtil.java | 50 --- .../java/cn/odboy/system/util/SqlUtil.java | 2 +- .../mapper/SystemOssStorageMapper.xml | 23 + .../mapper/SystemQiniuContentMapper.xml | 24 -- .../template/SystemEmailCaptchaTemplate.ftl | 2 +- .../src/main/java/cn/odboy/GenCode.java | 19 +- .../java/cn/odboy/HealthCheckPointer.java | 2 +- .../src/main/resources/application-dev.yml | 23 +- .../src/main/resources/application-prod.yml | 27 +- cutejava/doc/@Validated常用.txt | 6 +- cutejava/pom.xml | 16 +- 133 files changed, 1645 insertions(+), 1311 deletions(-) create mode 100644 cutejava-front/src/api/system/ossStorage.js create mode 100644 cutejava-front/src/views/system/storage/oss/index.vue delete mode 100644 cutejava-front/src/views/system/storage/qiniu/form.vue delete mode 100644 cutejava-front/src/views/system/storage/qiniu/index.vue create mode 100644 cutejava/cutejava-framework/src/main/java/cn/odboy/framework/properties/model/CaptchaModel.java create mode 100644 cutejava/cutejava-framework/src/main/java/cn/odboy/framework/properties/model/OSSConfigModel.java create mode 100644 cutejava/cutejava-framework/src/main/java/cn/odboy/framework/properties/model/StorageOSSModel.java create mode 100644 cutejava/cutejava-framework/src/main/java/cn/odboy/util/CsDateUtil.java create mode 100644 cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemOssStorageController.java delete mode 100644 cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemQiniuController.java create mode 100644 cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/dataobject/SystemOssStorageTb.java delete mode 100644 cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/dataobject/SystemQiniuConfigTb.java delete mode 100644 cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/dataobject/SystemQiniuContentTb.java delete mode 100644 cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/QuerySystemQiniuArgs.java rename cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/{CreateSystemDeptArgs.java => SystemCreateDeptArgs.java} (90%) rename cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/{CreateSystemDictArgs.java => SystemCreateDictArgs.java} (85%) rename cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/{CreateSystemDictDetailArgs.java => SystemCreateDictDetailArgs.java} (91%) rename cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/{CreateSystemJobArgs.java => SystemCreateJobArgs.java} (89%) rename cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/{CreateSystemRoleArgs.java => SystemCreateRoleArgs.java} (92%) create mode 100644 cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemOssStorageVo.java rename cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/{QuerySystemDeptArgs.java => SystemQueryDeptArgs.java} (94%) rename cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/{QuerySystemDictArgs.java => SystemQueryDictArgs.java} (91%) rename cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/{QuerySystemDictDetailArgs.java => SystemQueryDictDetailArgs.java} (91%) rename cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/{QuerySystemJobArgs.java => SystemQueryJobArgs.java} (94%) rename cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/{QuerySystemMenuArgs.java => SystemQueryMenuArgs.java} (92%) rename cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/{QuerySystemQuartzJobArgs.java => SystemQueryQuartzJobArgs.java} (93%) rename cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/{QuerySystemRoleArgs.java => SystemQueryRoleArgs.java} (94%) rename cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/{QuerySystemLocalStorageArgs.java => SystemQueryStorageArgs.java} (92%) rename cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/{QuerySystemUserArgs.java => SystemQueryUserArgs.java} (95%) rename cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/{SendSystemEmailArgs.java => SystemSendEmailArgs.java} (94%) rename cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/{UpdateSystemQuartzJobArgs.java => SystemUpdateQuartzJobArgs.java} (92%) rename cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/{UpdateSystemUserPasswordArgs.java => SystemUpdateUserPasswordArgs.java} (86%) create mode 100644 cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemOssStorageMapper.java delete mode 100644 cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemQiniuConfigMapper.java delete mode 100644 cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemQiniuContentMapper.java rename cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/{SecurityHelper.java => CsSecurityHelper.java} (99%) create mode 100644 cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/storage/OssStorageConfiguration.java rename cutejava/{cutejava-framework/src/main/java/cn/odboy/framework/server/config => cutejava-module-system/src/main/java/cn/odboy/system/framework/storage/local}/MultipartConfig.java (73%) create mode 100644 cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/storage/minio/MinioRepository.java create mode 100644 cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemOssStorageService.java delete mode 100644 cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemQiniuConfigService.java delete mode 100644 cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemQiniuContentService.java create mode 100644 cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/impl/SystemOssStorageServiceImpl.java delete mode 100644 cutejava/cutejava-module-system/src/main/java/cn/odboy/system/util/QiniuUtil.java create mode 100644 cutejava/cutejava-module-system/src/main/resources/mapper/SystemOssStorageMapper.xml delete mode 100644 cutejava/cutejava-module-system/src/main/resources/mapper/SystemQiniuContentMapper.xml diff --git a/cutejava-front/package.json b/cutejava-front/package.json index 3d222b2d..96452153 100644 --- a/cutejava-front/package.json +++ b/cutejava-front/package.json @@ -5,7 +5,8 @@ "author": "Odboy", "license": "Apache-2.0", "scripts": { - "dev-win": "set NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve", + "dev-win1": "vue-cli-service serve", + "dev-win2": "set NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve", "dev-linux": "export NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve", "build:prod": "vue-cli-service build", "build:stage": "vue-cli-service build --mode staging", diff --git a/cutejava-front/src/api/system/ossStorage.js b/cutejava-front/src/api/system/ossStorage.js new file mode 100644 index 00000000..8d26bd29 --- /dev/null +++ b/cutejava-front/src/api/system/ossStorage.js @@ -0,0 +1,19 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/ossStorage/uploadFile', + method: 'post', + data: data + }) +} + +export function del(ids) { + return request({ + url: 'api/ossStorage/removeFileByIds', + method: 'post', + data: ids + }) +} + +export default { add, del } diff --git a/cutejava-front/src/store/getters.js b/cutejava-front/src/store/getters.js index 314e8523..aadeb3cd 100644 --- a/cutejava-front/src/store/getters.js +++ b/cutejava-front/src/store/getters.js @@ -14,8 +14,8 @@ const getters = { imagesUploadApi: state => state.api.imagesUploadApi, baseApi: state => state.api.baseApi, fileUploadApi: state => state.api.fileUploadApi, + ossUploadApi: state => state.api.ossUploadApi, updateAvatarApi: state => state.api.updateAvatarApi, - qiNiuUploadApi: state => state.api.qiNiuUploadApi, druidSqlApi: state => state.api.druidSqlApi, swaggerApi: state => state.api.swaggerApi, websocketApi: state => state.api.websocketApi, diff --git a/cutejava-front/src/store/modules/api.js b/cutejava-front/src/store/modules/api.js index 0610a58a..87370bc1 100644 --- a/cutejava-front/src/store/modules/api.js +++ b/cutejava-front/src/store/modules/api.js @@ -6,8 +6,6 @@ const api = { imagesUploadApi: baseUrl + '/api/localStorage/uploadPicture', // 修改头像 updateAvatarApi: baseUrl + '/api/user/modifyUserAvatar', - // 上传文件到七牛云 - qiNiuUploadApi: baseUrl + '/api/qiNiuContent/uploadFile', // Sql 监控 druidSqlApi: baseUrl + '/druid/index.html', // websocket @@ -16,6 +14,8 @@ const api = { swaggerApi: baseUrl + '/doc.html', // 文件上传 fileUploadApi: baseUrl + '/api/localStorage/uploadFile', + // oss上传 + ossUploadApi: baseUrl + '/api/ossStorage/uploadFile', // baseUrl, baseApi: baseUrl } diff --git a/cutejava-front/src/views/system/storage/index.vue b/cutejava-front/src/views/system/storage/index.vue index 3c62f35e..b9f9376d 100644 --- a/cutejava-front/src/views/system/storage/index.vue +++ b/cutejava-front/src/views/system/storage/index.vue @@ -1,31 +1,31 @@ + + diff --git a/cutejava-front/src/views/system/storage/qiniu/form.vue b/cutejava-front/src/views/system/storage/qiniu/form.vue deleted file mode 100644 index 605672eb..00000000 --- a/cutejava-front/src/views/system/storage/qiniu/form.vue +++ /dev/null @@ -1,98 +0,0 @@ - - - - - diff --git a/cutejava-front/src/views/system/storage/qiniu/index.vue b/cutejava-front/src/views/system/storage/qiniu/index.vue deleted file mode 100644 index f9f91aa1..00000000 --- a/cutejava-front/src/views/system/storage/qiniu/index.vue +++ /dev/null @@ -1,189 +0,0 @@ - - - - - diff --git a/cutejava/README.md b/cutejava/README.md index f9f26000..6a2ef268 100644 --- a/cutejava/README.md +++ b/cutejava/README.md @@ -15,7 +15,7 @@ https://github.com/odboy-tianjun/cutejava - 和数据库表一一对应的类, 以`Tb`结尾 - API请求参数类名, 以`Args`结尾 - API响应参数类名, 以`Vo`结尾 -- 事件驱动类名,以`Event`结尾 +- 事件驱动类名, 以`Event`结尾 - 消息队列/Socket传输类名,以`Message`结尾 - 常用的辅助类的类名, 以`Cs`开头 - 查询分页、查询列表的方法,一律为同一个方法名 @@ -52,7 +52,8 @@ https://github.com/odboy-tianjun/cutejava - 七牛云存储:可同步七牛云存储的数据到系统,无需登录七牛云直接操作云数据 - 服务监控:监控服务器的负载情况 -#### 系统模块 +#### 系统模块 + - cutejava-framework:系统基础框架,提供核心功能,如:权限、数据权限、异常处理、日志、缓存、工具类、代码生成器、接口限流、接口防重、接口幂等。 - cutejava-system:系统功能模块,提供用户、角色、菜单、部门、岗位、字典、日志、定时任务、邮件、七牛云存储、服务监控等功能 - cutejava-pipeline:流水线模块,参考阿里云云效,提供流水线功能,可配置流水线任务,并支持任务依赖、任务参数、任务参数校验、任务参数回填。 diff --git a/cutejava/cutejava-framework/src/main/java/cn/odboy/annotation/AnonymousDeleteMapping.java b/cutejava/cutejava-framework/src/main/java/cn/odboy/annotation/AnonymousDeleteMapping.java index 754fd953..7d8ae30b 100644 --- a/cutejava/cutejava-framework/src/main/java/cn/odboy/annotation/AnonymousDeleteMapping.java +++ b/cutejava/cutejava-framework/src/main/java/cn/odboy/annotation/AnonymousDeleteMapping.java @@ -1,7 +1,6 @@ package cn.odboy.annotation; import org.springframework.core.annotation.AliasFor; -import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; diff --git a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/context/CsScriptHelper.java b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/context/CsScriptHelper.java index 6cec72f5..3e8860a0 100644 --- a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/context/CsScriptHelper.java +++ b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/context/CsScriptHelper.java @@ -85,9 +85,9 @@ public class CsScriptHelper { try { // 执行脚本 engine.eval(script); - // 由ScriptEngines实现的接口,其方法允许调用以前已执行的脚本中的过程。 + // 由ScriptEngines实现的接口, 其方法允许调用以前已执行的脚本中的过程。 Invocable inv = (Invocable) engine; - // 调用全局函数,并传入参数 + // 调用全局函数, 并传入参数 return inv.invokeFunction(functionName, args); } catch (ScriptException e) { throw new ScriptRuntimeException(e); diff --git a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/context/SpringBeanHolder.java b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/context/SpringBeanHolder.java index e1e55121..b4ce0928 100644 --- a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/context/SpringBeanHolder.java +++ b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/context/SpringBeanHolder.java @@ -22,8 +22,8 @@ public class SpringBeanHolder implements ApplicationContextAware, DisposableBean private static boolean addCallback = true; /** - * 针对 某些初始化方法,在SpringContextHolder 未初始化时 提交回调方法。 - * 在SpringContextHolder 初始化后,进行回调使用 + * 针对 某些初始化方法, 在SpringContextHolder 未初始化时 提交回调方法。 + * 在SpringContextHolder 初始化后, 进行回调使用 * * @param callBack 回调函数 */ diff --git a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/doc/SwaggerConfig.java b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/doc/SwaggerConfig.java index 1b6a0694..fd5146c0 100644 --- a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/doc/SwaggerConfig.java +++ b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/doc/SwaggerConfig.java @@ -1,6 +1,7 @@ package cn.odboy.framework.doc; import cn.odboy.constant.SystemConst; +import cn.odboy.framework.properties.AppProperties; import cn.odboy.util.AnonTagUtil; import lombok.RequiredArgsConstructor; import org.springframework.beans.BeansException; @@ -35,19 +36,15 @@ import java.util.stream.Collectors; @EnableSwagger2 @RequiredArgsConstructor public class SwaggerConfig { - @Value("${server.servlet.context-path:}") private String apiPath; - - @Value("${app.swagger.enabled}") - private Boolean enabled; - + private final AppProperties properties; private final ApplicationContext applicationContext; @Bean public Docket createRestApi() { return new Docket(DocumentationType.SWAGGER_2) - .enable(enabled) + .enable(properties.getSwagger().getEnabled()) .pathMapping("/") .apiInfo(apiInfo()) .select() @@ -104,7 +101,7 @@ public class SwaggerConfig { } /** - * 解决Springfox与SpringBoot集成后,WebMvcRequestHandlerProvider和WebFluxRequestHandlerProvider冲突问题 + * 解决Springfox与SpringBoot集成后, WebMvcRequestHandlerProvider和WebFluxRequestHandlerProvider冲突问题 * * @return / */ diff --git a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/exception/handler/GlobalExceptionHandler.java b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/exception/handler/GlobalExceptionHandler.java index fe6e198e..c0e9575d 100644 --- a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/exception/handler/GlobalExceptionHandler.java +++ b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/exception/handler/GlobalExceptionHandler.java @@ -12,8 +12,6 @@ import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; -import static org.springframework.http.HttpStatus.NOT_FOUND; - @Slf4j @RestControllerAdvice public class GlobalExceptionHandler { diff --git a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/config/MybatisPlusConfig.java b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/config/MybatisPlusConfig.java index c92524b6..eb0200f9 100644 --- a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/config/MybatisPlusConfig.java +++ b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/config/MybatisPlusConfig.java @@ -18,7 +18,7 @@ public class MybatisPlusConfig { // MySQL的分页拦截器 PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(DbType.MYSQL); paginationInnerInterceptor.setMaxLimit(500L); - /// 这个配置会导致:当分页没数据时,游标从0开始,会导致无论page为什么值,就算分页超出最大页数,依然能够查询到 + /// 这个配置会导致:当分页没数据时, 游标从0开始,会导致无论page为什么值,就算分页超出最大页数,依然能够查询到 /// paginationInnerInterceptor.setOverflow(true); paginationInnerInterceptor.setOptimizeJoin(true); interceptor.addInnerInterceptor(paginationInnerInterceptor); diff --git a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/core/CsMpCmdGenUtil.java b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/core/CsMpCmdGenUtil.java index 87eac1aa..9726538e 100644 --- a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/core/CsMpCmdGenUtil.java +++ b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/core/CsMpCmdGenUtil.java @@ -15,6 +15,9 @@ */ package cn.odboy.framework.mybatisplus.core; +import cn.hutool.core.util.StrUtil; +import cn.odboy.base.CsBaseUserTimeTb; +import cn.odboy.framework.exception.BadRequestException; import cn.odboy.util.FileUtil; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.generator.FastAutoGenerator; @@ -42,6 +45,8 @@ import java.util.function.Consumer; */ @Data public class CsMpCmdGenUtil { + // 项目根路径。生成结果 C:\Users\Administrator\Documents\GitHub\cutejava\cutejava + private static final String projectRootPath = System.getProperty("user.dir") + "/"; /** * 数据库类型 MySQL */ @@ -56,16 +61,18 @@ public class CsMpCmdGenUtil { private String databaseUsername; private String databasePassword; private String driverClassName; - private String parentPackageName; - private String parentPackageModuleName; + private String parentPackageName = "cn.odboy"; + private String parentModuleName; /** * 代码生成函数 * + * @param moduleName 模块名称 * @param tablePrefix 表前缀(可空) * @param tableNames 表名称, 多个用逗号分隔 */ - public void gen(String tablePrefix, List tableNames) { + public void gen(String moduleName, String tablePrefix, List tableNames) { + this.parentModuleName = moduleName; // 1.数据库配置 DataSourceConfig.Builder dataSourceConfigBuilder = new DataSourceConfig .Builder(this.databaseUrl, this.databaseUsername, this.databasePassword) @@ -111,7 +118,7 @@ public class CsMpCmdGenUtil { // 5.2.Controller策略配置 // 开启生成@RestController控制器 fastAutoGenerator.strategyConfig(strategyConfigBuilder -> strategyConfigBuilder.controllerBuilder().enableRestStyle()); - // 如果不需要生成Controller,fastAutoGenerator.templateConfig(templateConfig -> templateConfig.controller(""))。5.3.Service策略配置:格式化service接口和实现类的文件名称, 去掉默认的ServiceName前面的I + // 如果不需要生成Controller, fastAutoGenerator.templateConfig(templateConfig -> templateConfig.controller(""))。5.3.Service策略配置:格式化service接口和实现类的文件名称, 去掉默认的ServiceName前面的I fastAutoGenerator.strategyConfig(strategyConfigBuilder -> strategyConfigBuilder .serviceBuilder() .formatServiceFileName("%sService") @@ -141,18 +148,45 @@ public class CsMpCmdGenUtil { .enableSkipView() .disableSqlFilter() .addInclude(tableNames) + // 实体类生成策略 + .entityBuilder() + .superClass(CsBaseUserTimeTb.class) + .addIgnoreColumns("create_time", "update_time", "create_by", "update_by") + // 开启生成实体时生成字段注解。 + // 会在实体类的属性前,添加[@TableField("nickname")] + .enableTableFieldAnnotation() + .disableSerialVersionUID() + // 阶段2:Mapper策略配置 .mapperBuilder() + // 开启 @Mapper 注解。 + // 会在mapper接口上添加注解[@Mapper] +// .enableMapperAnnotation() + // 启用 BaseResultMap 生成。 + // 会在mapper.xml文件生成[通用查询映射结果]配置。 +// .enableBaseResultMap() + // 启用 BaseColumnList。 + // 会在mapper.xml文件生成[通用查询结果列 ]配置 +// .enableBaseColumnList() + // 阶段4:Controller策略配置 + .controllerBuilder() + // 会在控制类中加[@RestController]注解。 + .enableRestStyle() + // 开启驼峰转连字符 + .enableHyphenStyle() .build(); } private Consumer getPackageConfigConsumer() { - String mapperPath = FileUtil.getTmpDirPath() + "CodeGen/resources/mapper"; + String mapperPath = projectRootPath + "CodeGen/resources/mapper"; + if (StrUtil.isBlank(this.parentModuleName)) { + throw new BadRequestException("模块名称必填"); + } return packageConfigBuilder -> packageConfigBuilder - .parent(this.parentPackageName == null ? "cn.codegen" : this.parentPackageName) - .moduleName(this.parentPackageModuleName == null ? "moduleName" : this.parentPackageModuleName) - .entity("domain") + .parent(this.parentPackageName) + .moduleName(this.parentModuleName) + .entity("dal.dataobject") + .mapper("dal.mysql") .service("service") - .mapper("mapper") .serviceImpl("service.impl") .controller("rest") .pathInfo(Collections.singletonMap(OutputFile.xml, mapperPath)); diff --git a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/core/CsMpQUtil.java b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/core/CsMpQUtil.java index 23c8c5e0..27e1a0e8 100644 --- a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/core/CsMpQUtil.java +++ b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/core/CsMpQUtil.java @@ -4,8 +4,8 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.odboy.base.CsBaseUserTimeTb; -import cn.odboy.framework.mybatisplus.config.CsMpQuery; import cn.odboy.framework.exception.BadRequestException; +import cn.odboy.framework.mybatisplus.config.CsMpQuery; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; diff --git a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/core/interfaces/CsMpServiceImpl.java b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/core/interfaces/CsMpServiceImpl.java index 3aceca2c..db3f8b3a 100644 --- a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/core/interfaces/CsMpServiceImpl.java +++ b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/mybatisplus/core/interfaces/CsMpServiceImpl.java @@ -18,8 +18,8 @@ package cn.odboy.framework.mybatisplus.core.interfaces; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.odboy.base.CsResultVo; -import cn.odboy.framework.mybatisplus.core.CsMpQUtil; import cn.odboy.framework.exception.BadRequestException; +import cn.odboy.framework.mybatisplus.core.CsMpQUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.enums.SqlMethod; diff --git a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/properties/AppProperties.java b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/properties/AppProperties.java index 2d5059eb..fe5d0e4a 100644 --- a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/properties/AppProperties.java +++ b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/properties/AppProperties.java @@ -21,6 +21,8 @@ public class AppProperties { private SwaggerApiDocSettingModel swagger; private ThreadPoolSettingModel asyncTaskPool; private ThreadPoolSettingModel pipelineTaskPool; + private CaptchaModel captcha; + private StorageOSSModel oss; } diff --git a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/properties/model/CaptchaModel.java b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/properties/model/CaptchaModel.java new file mode 100644 index 00000000..e707ab02 --- /dev/null +++ b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/properties/model/CaptchaModel.java @@ -0,0 +1,14 @@ +package cn.odboy.framework.properties.model; + +import cn.odboy.base.CsObject; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class CaptchaModel extends CsObject { + /** + * 验证码有效时间, 单位: 秒 + */ + private Long expireTime; +} diff --git a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/properties/model/ContentRsaEncodeSettingModel.java b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/properties/model/ContentRsaEncodeSettingModel.java index fd29032e..3efe5073 100644 --- a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/properties/model/ContentRsaEncodeSettingModel.java +++ b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/properties/model/ContentRsaEncodeSettingModel.java @@ -1,13 +1,14 @@ package cn.odboy.framework.properties.model; +import cn.odboy.base.CsObject; import lombok.Getter; import lombok.Setter; /** - * 密码加密传输,前端公钥加密,后端私钥解密 + * 密码加密传输, 前端公钥加密,后端私钥解密 */ @Getter @Setter -public class ContentRsaEncodeSettingModel { - public String privateKey; +public class ContentRsaEncodeSettingModel extends CsObject { + private String privateKey; } diff --git a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/properties/model/JwtAuthSettingModel.java b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/properties/model/JwtAuthSettingModel.java index ffa5da43..a95384cc 100644 --- a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/properties/model/JwtAuthSettingModel.java +++ b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/properties/model/JwtAuthSettingModel.java @@ -1,5 +1,6 @@ package cn.odboy.framework.properties.model; +import cn.odboy.base.CsObject; import lombok.Getter; import lombok.Setter; @@ -8,7 +9,7 @@ import lombok.Setter; */ @Getter @Setter -public class JwtAuthSettingModel { +public class JwtAuthSettingModel extends CsObject { /** * 必须使用最少88位的Base64对该令牌进行编码 */ diff --git a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/properties/model/OSSConfigModel.java b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/properties/model/OSSConfigModel.java new file mode 100644 index 00000000..eba19705 --- /dev/null +++ b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/properties/model/OSSConfigModel.java @@ -0,0 +1,26 @@ +package cn.odboy.framework.properties.model; + +import cn.odboy.base.CsObject; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OSSConfigModel extends CsObject { + /** + * 服务地址 + */ + private String endpoint; + /** + * 存储桶名称 + */ + private String bucketName; + /** + * Access Key + */ + private String accessKey; + /** + * Secret Key + */ + private String secretKey; +} diff --git a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/properties/model/StorageOSSModel.java b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/properties/model/StorageOSSModel.java new file mode 100644 index 00000000..53c4fabd --- /dev/null +++ b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/properties/model/StorageOSSModel.java @@ -0,0 +1,14 @@ +package cn.odboy.framework.properties.model; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class StorageOSSModel { + /** + * 上传大小, 单位: M + */ + private Long maxSize; + private OSSConfigModel minio; +} diff --git a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/properties/model/SwaggerApiDocSettingModel.java b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/properties/model/SwaggerApiDocSettingModel.java index 5c4840cb..62e99805 100644 --- a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/properties/model/SwaggerApiDocSettingModel.java +++ b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/properties/model/SwaggerApiDocSettingModel.java @@ -1,5 +1,6 @@ package cn.odboy.framework.properties.model; +import cn.odboy.base.CsObject; import lombok.Getter; import lombok.Setter; @@ -9,6 +10,6 @@ import lombok.Setter; */ @Getter @Setter -public class SwaggerApiDocSettingModel { - private boolean enabled; +public class SwaggerApiDocSettingModel extends CsObject { + private Boolean enabled; } diff --git a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/properties/model/ThreadPoolSettingModel.java b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/properties/model/ThreadPoolSettingModel.java index c709120a..eff66f80 100644 --- a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/properties/model/ThreadPoolSettingModel.java +++ b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/properties/model/ThreadPoolSettingModel.java @@ -1,5 +1,6 @@ package cn.odboy.framework.properties.model; +import cn.odboy.base.CsObject; import lombok.Getter; import lombok.Setter; @@ -11,7 +12,7 @@ import lombok.Setter; */ @Getter @Setter -public class ThreadPoolSettingModel { +public class ThreadPoolSettingModel extends CsObject { /** * 核心线程池大小 */ diff --git a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/properties/model/UserLoginCaptchaSettingModel.java b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/properties/model/UserLoginCaptchaSettingModel.java index c734c181..f97dfc56 100644 --- a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/properties/model/UserLoginCaptchaSettingModel.java +++ b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/properties/model/UserLoginCaptchaSettingModel.java @@ -1,5 +1,6 @@ package cn.odboy.framework.properties.model; +import cn.odboy.base.CsObject; import cn.odboy.constant.CaptchaCodeEnum; import cn.odboy.framework.exception.BadRequestException; import cn.odboy.util.StringUtil; @@ -17,7 +18,7 @@ import java.awt.*; */ @Getter @Setter -public class UserLoginCaptchaSettingModel { +public class UserLoginCaptchaSettingModel extends CsObject { private CaptchaCodeEnum codeType; /** @@ -61,7 +62,7 @@ public class UserLoginCaptchaSettingModel { case ARITHMETIC: // 算术类型 https://gitee.com/whvse/EasyCaptcha captcha = new FixedArithmeticCaptcha(width, height); - // 几位数运算,默认是两位 + // 几位数运算, 默认是两位 captcha.setLen(length); break; case CHINESE: diff --git a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/properties/model/UserLoginSettingModel.java b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/properties/model/UserLoginSettingModel.java index f0527685..e2e6bb6b 100644 --- a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/properties/model/UserLoginSettingModel.java +++ b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/properties/model/UserLoginSettingModel.java @@ -1,5 +1,6 @@ package cn.odboy.framework.properties.model; +import cn.odboy.base.CsObject; import lombok.Getter; import lombok.Setter; @@ -10,7 +11,7 @@ import lombok.Setter; */ @Getter @Setter -public class UserLoginSettingModel { +public class UserLoginSettingModel extends CsObject { /** * 账号单用户 登录 */ diff --git a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/quartz/config/QuartzConfig.java b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/quartz/config/QuartzConfig.java index a2979daa..585d5cef 100644 --- a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/quartz/config/QuartzConfig.java +++ b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/quartz/config/QuartzConfig.java @@ -34,7 +34,7 @@ public class QuartzConfig { @Override protected Object createJobInstance(@NonNull TriggerFiredBundle bundle) throws Exception { try { - // 调用父类的方法,把Job注入到spring中 + // 调用父类的方法, 把Job注入到spring中 Object jobInstance = super.createJobInstance(bundle); capableBeanFactory.autowireBean(jobInstance); log.debug("Job instance created and autowired: {}", jobInstance.getClass().getName()); diff --git a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/redis/RedisConfiguration.java b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/redis/RedisConfiguration.java index 9ecc0981..50261f3a 100644 --- a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/redis/RedisConfiguration.java +++ b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/redis/RedisConfiguration.java @@ -36,8 +36,8 @@ import java.util.Map; public class RedisConfiguration extends CachingConfigurerSupport { /** - * 自动识别json对象白名单配置(仅允许解析的包名,范围越小越安全)
- * 未配置可能导致,登录失败,反复登录等问题 + * 自动识别json对象白名单配置(仅允许解析的包名, 范围越小越安全)
+ * 未配置可能导致, 登录失败, 反复登录等问题 */ private static final String[] WHITELIST_STR = { "org.springframework", diff --git a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/redis/RedisHelper.java b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/redis/RedisHelper.java index 41e201b0..3ce00adf 100644 --- a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/redis/RedisHelper.java +++ b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/redis/RedisHelper.java @@ -162,7 +162,7 @@ public class RedisHelper { if (keys.length == 1) { boolean result = redisTemplate.delete(keys[0]); log.debug("--------------------------------------------"); - log.debug(new StringBuilder("删除缓存:").append(keys[0]).append(",结果:").append(result).toString()); + log.debug(new StringBuilder("删除缓存:").append(keys[0]).append(", 结果:").append(result).toString()); log.debug("--------------------------------------------"); } else { Set keySet = new HashSet<>(); @@ -218,7 +218,7 @@ public class RedisHelper { if (value == null) { return null; } - // 如果 value 不是目标类型,则尝试将其反序列化为 clazz 类型 by + // 如果 value 不是目标类型, 则尝试将其反序列化为 clazz 类型 by if (!clazz.isInstance(value)) { return JSON.parseObject(value.toString(), clazz); } else if (clazz.isInstance(value)) { @@ -308,7 +308,7 @@ public class RedisHelper { * * @param key 键 * @param value 值 - * @param time 时间(秒) time要大于0 如果time小于等于0 将设置无限期,注意:这里将会替换原有的时间 + * @param time 时间(秒) time要大于0 如果time小于等于0 将设置无限期, 注意:这里将会替换原有的时间 * @return true成功 false 失败 */ public boolean set(String key, Object value, long time) { diff --git a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/server/config/AsyncTheadPoolConfig.java b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/server/config/AsyncTheadPoolConfig.java index 3a1360cb..baae1446 100644 --- a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/server/config/AsyncTheadPoolConfig.java +++ b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/server/config/AsyncTheadPoolConfig.java @@ -23,7 +23,7 @@ public class AsyncTheadPoolConfig implements AsyncConfigurer { private AppProperties properties; /** - * 自定义线程池,用法 @Async + * 自定义线程池, 用法 @Async * * @return Executor */ @@ -39,7 +39,7 @@ public class AsyncTheadPoolConfig implements AsyncConfigurer { } /** - * 自定义线程池,用法,注入到类中使用 + * 自定义线程池, 用法, 注入到类中使用 */ @Bean("taskAsync") public ThreadPoolTaskExecutor taskAsync() { diff --git a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/server/core/ConfigurerAdapter.java b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/server/core/ConfigurerAdapter.java index 7c43fdda..ea465611 100644 --- a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/server/core/ConfigurerAdapter.java +++ b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/server/core/ConfigurerAdapter.java @@ -1,6 +1,5 @@ package cn.odboy.framework.server.core; -import cn.odboy.framework.properties.AppProperties; import cn.odboy.framework.server.converters.DateStringArraysToListDateConverter; import cn.odboy.framework.server.converters.DateStringToDateConverter; import com.alibaba.fastjson2.JSONWriter; @@ -28,10 +27,6 @@ import java.util.List; @EnableWebMvc @RequiredArgsConstructor public class ConfigurerAdapter implements WebMvcConfigurer { - /** - * 文件配置 - */ - private final AppProperties properties; private final DateStringArraysToListDateConverter dateStringArraysToListDateConverter; private final DateStringToDateConverter dateStringToDateConverter; private final FileUploadPathHelper fileUploadPathHelper; @@ -67,7 +62,7 @@ public class ConfigurerAdapter implements WebMvcConfigurer { supportMediaTypeList.add(MediaType.APPLICATION_JSON); FastJsonConfig config = new FastJsonConfig(); config.setDateFormat("yyyy-MM-dd HH:mm:ss"); - // 开启引用检测,枚举支持 + // 开启引用检测, 枚举支持 config.setWriterFeatures( // 是否输出值为null的字段 // SerializerFeature.WriteMapNullValue, @@ -77,12 +72,11 @@ public class ConfigurerAdapter implements WebMvcConfigurer { // JSONWriter.Feature.WriteNullListAsEmpty, // 字符类型字段如果为null,输出为"",而非null // JSONWriter.Feature.WriteNullStringAsEmpty, - // 太具体的数值会直接影响逻辑本身,所以不要这个 + // 太具体的数值会直接影响逻辑本身, 所以不要这个 // SerializerFeature.WriteNullNumberAsZero, JSONWriter.Feature.WriteEnumUsingToString, -// SerializerFeature.DisableCircularReferenceDetect - JSONWriter.Feature.ReferenceDetection - ); +// SerializerFeature.DisableCircularReferenceDetect, + JSONWriter.Feature.ReferenceDetection); fastJsonConverter.setFastJsonConfig(config); fastJsonConverter.setSupportedMediaTypes(supportMediaTypeList); fastJsonConverter.setDefaultCharset(StandardCharsets.UTF_8); diff --git a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/server/core/FileUploadPathHelper.java b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/server/core/FileUploadPathHelper.java index 26586d76..f8654a86 100644 --- a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/server/core/FileUploadPathHelper.java +++ b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/server/core/FileUploadPathHelper.java @@ -14,7 +14,6 @@ public class FileUploadPathHelper { /** * 单位MB */ - private static final int FILE_MAX_SIZE = 100; private static final int AVATAR_MAX_SIZE = 5; private static final String PATH_WINDOWS = "C:\\${appName}\\file\\"; private static final String PATH_MAC = "/Users/odboy/${appName}/file/"; @@ -32,10 +31,6 @@ public class FileUploadPathHelper { return PATH_LINUX.replace("${appName}", appName); } - public int getFileMaxSize() { - return FILE_MAX_SIZE; - } - public int getAvatarMaxSize() { return AVATAR_MAX_SIZE; } diff --git a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/websocket/context/CsWsServer.java b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/websocket/context/CsWsServer.java index 9a35023d..dc3289a4 100644 --- a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/websocket/context/CsWsServer.java +++ b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/websocket/context/CsWsServer.java @@ -19,7 +19,7 @@ public class CsWsServer { @Autowired private WsClientManager wsClientManager; /** - * 与某个客户端的连接会话,需要通过它来给客户端发送数据 + * 与某个客户端的连接会话, 需要通过它来给客户端发送数据 */ private Session session; /** @@ -88,7 +88,7 @@ public class CsWsServer { */ public void sendMessage(CsWsMessage message, @PathParam("sid") String sid) throws IOException { String body = JSON.toJSONString(message); - log.info("推送消息到{},推送内容:{}", sid, message); + log.info("推送消息到{}, 推送内容:{}", sid, message); try { if (sid == null) { sendToAll(body); diff --git a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/websocket/context/WsClientManager.java b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/websocket/context/WsClientManager.java index 333e290d..f0a32dbd 100644 --- a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/websocket/context/WsClientManager.java +++ b/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/websocket/context/WsClientManager.java @@ -9,12 +9,12 @@ import java.util.concurrent.ConcurrentHashMap; @Component public class WsClientManager { /** - * concurrent包的线程安全Map,用来存放每个客户端对应的MyWebSocket对象。(分布式必出问题) + * concurrent包的线程安全Map, 用来存放每个客户端对应的MyWebSocket对象。(分布式必出问题) */ private final Map client = new ConcurrentHashMap<>(); public void addClient(String sid, CsWsServer csWsServer) { - // 如果存在就先删除一个,防止重复推送消息 + // 如果存在就先删除一个, 防止重复推送消息 client.remove(sid); client.put(sid, csWsServer); } diff --git a/cutejava/cutejava-framework/src/main/java/cn/odboy/util/BigDecimalUtil.java b/cutejava/cutejava-framework/src/main/java/cn/odboy/util/BigDecimalUtil.java index 49822c0c..c52e5646 100644 --- a/cutejava/cutejava-framework/src/main/java/cn/odboy/util/BigDecimalUtil.java +++ b/cutejava/cutejava-framework/src/main/java/cn/odboy/util/BigDecimalUtil.java @@ -36,7 +36,7 @@ public final class BigDecimalUtil { * * @param a 加数 * @param b 加数 - * @return 两个加数的和,保留两位小数 + * @return 两个加数的和, 保留两位小数 */ public static BigDecimal add(Object a, Object b) { BigDecimal bdA = toBigDecimal(a); @@ -49,7 +49,7 @@ public final class BigDecimalUtil { * * @param a 被减数 * @param b 减数 - * @return 两数的差,保留两位小数 + * @return 两数的差, 保留两位小数 */ public static BigDecimal subtract(Object a, Object b) { BigDecimal bdA = toBigDecimal(a); @@ -62,7 +62,7 @@ public final class BigDecimalUtil { * * @param a 乘数 * @param b 乘数 - * @return 两个乘数的积,保留两位小数 + * @return 两个乘数的积, 保留两位小数 */ public static BigDecimal multiply(Object a, Object b) { BigDecimal bdA = toBigDecimal(a); diff --git a/cutejava/cutejava-framework/src/main/java/cn/odboy/util/CloseUtil.java b/cutejava/cutejava-framework/src/main/java/cn/odboy/util/CloseUtil.java index 77713aa8..0262ddfc 100644 --- a/cutejava/cutejava-framework/src/main/java/cn/odboy/util/CloseUtil.java +++ b/cutejava/cutejava-framework/src/main/java/cn/odboy/util/CloseUtil.java @@ -5,7 +5,7 @@ import lombok.experimental.UtilityClass; import java.io.Closeable; /** - * 用于关闭各种连接,缺啥补啥 + * 用于关闭各种连接, 缺啥补啥 */ @UtilityClass public final class CloseUtil { diff --git a/cutejava/cutejava-framework/src/main/java/cn/odboy/util/CsDateUtil.java b/cutejava/cutejava-framework/src/main/java/cn/odboy/util/CsDateUtil.java new file mode 100644 index 00000000..b203f5c4 --- /dev/null +++ b/cutejava/cutejava-framework/src/main/java/cn/odboy/util/CsDateUtil.java @@ -0,0 +1,37 @@ +package cn.odboy.util; + +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateUtil; +import lombok.experimental.UtilityClass; + +import java.util.Date; + +@UtilityClass +public class CsDateUtil { + /** + * 获取当前时间毫秒数 + * + * @return / + */ + public static String getNowDateTimeMsStr() { + return DateUtil.format(new Date(), DatePattern.PURE_DATETIME_MS_PATTERN); + } + + /** + * 获取当前时间,但不包括毫秒数 + * + * @return / + */ + public static String getNowDateTimeStr() { + return DateUtil.format(new Date(), DatePattern.PURE_DATETIME_PATTERN); + } + + /** + * 获取当前时间,但不包括毫秒数 + * + * @return / + */ + public static String getNowDateStr() { + return DateUtil.format(new Date(), DatePattern.PURE_DATE_PATTERN); + } +} diff --git a/cutejava/cutejava-framework/src/main/java/cn/odboy/util/CsDistributedIdUtil.java b/cutejava/cutejava-framework/src/main/java/cn/odboy/util/CsDistributedIdUtil.java index c17883f3..7a45a2c8 100644 --- a/cutejava/cutejava-framework/src/main/java/cn/odboy/util/CsDistributedIdUtil.java +++ b/cutejava/cutejava-framework/src/main/java/cn/odboy/util/CsDistributedIdUtil.java @@ -10,7 +10,7 @@ import java.util.concurrent.atomic.AtomicLong; */ public final class CsDistributedIdUtil { /** - * 起始毫秒时间戳,2020-12-30 + * 起始毫秒时间戳, 2020-12-30 */ private static final long START_TIMESTAMP = 1609314517000L; /** @@ -77,7 +77,7 @@ public final class CsDistributedIdUtil { } /** - * 构造函数,初始化数据中心 ID 和机器 ID + * 构造函数, 初始化数据中心 ID 和机器 ID * * @param dataCenterId 数据中心 ID * @param workerId 机器 ID @@ -116,7 +116,7 @@ public final class CsDistributedIdUtil { public long nextId() { long currentTimestamp = System.currentTimeMillis(); - // 如果当前时间戳小于上一次生成 ID 的时间戳,说明时钟回拨,抛出异常 + // 如果当前时间戳小于上一次生成 ID 的时间戳, 说明时钟回拨,抛出异常 if (currentTimestamp < lastTimestamp.get()) { throw new RuntimeException("Clock moved backwards. Refusing to generate id for " + (lastTimestamp.get() - currentTimestamp) + " milliseconds"); } diff --git a/cutejava/cutejava-framework/src/main/java/cn/odboy/util/CsListUtil.java b/cutejava/cutejava-framework/src/main/java/cn/odboy/util/CsListUtil.java index eefb1363..a171622b 100644 --- a/cutejava/cutejava-framework/src/main/java/cn/odboy/util/CsListUtil.java +++ b/cutejava/cutejava-framework/src/main/java/cn/odboy/util/CsListUtil.java @@ -47,8 +47,8 @@ public final class CsListUtil { } /** - * list转map,保留新值 -> Map userMap = items.stream().collect(Collectors.toMap(User::getName, user -> user))
- * list转map,保留旧值 -> Map userMap = users.stream().collect(Collectors.toMap(User::getName, user -> user, (existing, replacement) -> existing)); + * list转map, 保留新值 -> Map userMap = items.stream().collect(Collectors.toMap(User::getName, user -> user))
+ * list转map, 保留旧值 -> Map userMap = users.stream().collect(Collectors.toMap(User::getName, user -> user, (existing, replacement) -> existing)); */ public static void main(String[] args) { List entities = new ArrayList<>(); diff --git a/cutejava/cutejava-framework/src/main/java/cn/odboy/util/FileUtil.java b/cutejava/cutejava-framework/src/main/java/cn/odboy/util/FileUtil.java index 23f6f32f..d0e829b5 100644 --- a/cutejava/cutejava-framework/src/main/java/cn/odboy/util/FileUtil.java +++ b/cutejava/cutejava-framework/src/main/java/cn/odboy/util/FileUtil.java @@ -30,7 +30,7 @@ import java.util.stream.Collectors; import static cn.odboy.constant.SystemConst.*; /** - * File工具类,扩展 hutool 工具包 + * File工具类, 扩展 hutool 工具包 */ @Slf4j @UtilityClass @@ -39,9 +39,9 @@ public final class FileUtil extends cn.hutool.core.io.FileUtil { /** * 系统临时目录 *
- * windows 包含路径分割符,但Linux 不包含, - * 在windows \\==\ 前提下, - * 为安全起见 同意拼装 路径分割符, + * windows 包含路径分割符, 但Linux 不包含, + * 在windows \\==\ 前提下, + * 为安全起见 同意拼装 路径分割符, *
      *       java.io.tmpdir
      *       windows : C:\Users/xxx\AppData\Local\Temp\
@@ -77,7 +77,7 @@ public final class FileUtil extends cn.hutool.core.io.FileUtil {
         String prefix = "." + getSuffix(fileName);
         File file = null;
         try {
-            // 用uuid作为文件名,防止生成的临时文件重复
+            // 用uuid作为文件名, 防止生成的临时文件重复
             file = new File(SYS_TEM_DIR + IdUtil.simpleUUID() + prefix);
             // MultipartFile to File
             multipartFile.transferTo(file);
@@ -189,7 +189,7 @@ public final class FileUtil extends cn.hutool.core.io.FileUtil {
             });
             return sanitizedMap;
         }).collect(Collectors.toList());
-        // 一次性写出内容,使用默认样式,强制输出标题
+        // 一次性写出内容, 使用默认样式,强制输出标题
         writer.write(sanitizedList, true);
         SXSSFSheet sheet = (SXSSFSheet) writer.getSheet();
         //上面需要强转SXSSFSheet  不然没有trackAllColumnsForAutoSizing方法
diff --git a/cutejava/cutejava-framework/src/main/java/cn/odboy/util/IpUtil.java b/cutejava/cutejava-framework/src/main/java/cn/odboy/util/IpUtil.java
index 09996cb2..35749f6b 100644
--- a/cutejava/cutejava-framework/src/main/java/cn/odboy/util/IpUtil.java
+++ b/cutejava/cutejava-framework/src/main/java/cn/odboy/util/IpUtil.java
@@ -48,10 +48,10 @@ public final class IpUtil {
                     // 排除loopback类型地址
                     if (!inetAddr.isLoopbackAddress()) {
                         if (inetAddr.isSiteLocalAddress()) {
-                            // 如果是site-local地址,就是它了
+                            // 如果是site-local地址, 就是它了
                             return inetAddr.getHostAddress();
                         } else if (candidateAddress == null) {
-                            // site-local类型的地址未被发现,先记录候选地址
+                            // site-local类型的地址未被发现, 先记录候选地址
                             candidateAddress = inetAddr;
                         }
                     }
diff --git a/cutejava/cutejava-framework/src/main/java/cn/odboy/util/RsaEncryptUtil.java b/cutejava/cutejava-framework/src/main/java/cn/odboy/util/RsaEncryptUtil.java
index d2817cb8..927b2bd6 100644
--- a/cutejava/cutejava-framework/src/main/java/cn/odboy/util/RsaEncryptUtil.java
+++ b/cutejava/cutejava-framework/src/main/java/cn/odboy/util/RsaEncryptUtil.java
@@ -12,7 +12,7 @@ import java.security.spec.PKCS8EncodedKeySpec;
 import java.security.spec.X509EncodedKeySpec;
 
 /**
- * Rsa 工具类,公钥私钥生成,加解密
+ * Rsa 工具类, 公钥私钥生成, 加解密
  */
 @UtilityClass
 public final class RsaEncryptUtil {
@@ -42,7 +42,7 @@ public final class RsaEncryptUtil {
         System.out.println("加密后:" + text1);
         System.out.println("解密后:" + text2);
         if (RsaEncryptUtil.SRC.equals(text2)) {
-            System.out.println("解密字符串和原始字符串一致,解密成功");
+            System.out.println("解密字符串和原始字符串一致, 解密成功");
         } else {
             System.out.println("解密字符串和原始字符串不一致,解密失败");
         }
diff --git a/cutejava/cutejava-module-system/pom.xml b/cutejava/cutejava-module-system/pom.xml
index b5419fd5..e10ef109 100644
--- a/cutejava/cutejava-module-system/pom.xml
+++ b/cutejava/cutejava-module-system/pom.xml
@@ -17,5 +17,11 @@
             cutejava-framework
             1.4.1
         
+        
+        
+            io.minio
+            minio
+            8.5.17
+        
     
 
diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemAuthController.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemAuthController.java
index 5a475dca..b8220ca6 100644
--- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemAuthController.java
+++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemAuthController.java
@@ -3,19 +3,19 @@ package cn.odboy.system.controller;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.IdUtil;
 import cn.odboy.annotation.AnonymousPostMapping;
-import cn.odboy.constant.SystemConst;
 import cn.odboy.constant.CaptchaCodeEnum;
+import cn.odboy.constant.SystemConst;
+import cn.odboy.framework.exception.BadRequestException;
+import cn.odboy.framework.properties.AppProperties;
+import cn.odboy.framework.redis.RedisHelper;
 import cn.odboy.system.dal.model.SystemUserInfoVo;
 import cn.odboy.system.dal.model.SystemUserJwtVo;
 import cn.odboy.system.dal.model.SystemUserLoginArgs;
 import cn.odboy.system.dal.redis.SystemRedisKey;
 import cn.odboy.system.dal.redis.SystemUserOnlineInfoDAO;
-import cn.odboy.system.framework.permission.core.SecurityHelper;
+import cn.odboy.system.framework.permission.core.CsSecurityHelper;
 import cn.odboy.system.framework.permission.core.handler.TokenProvider;
 import cn.odboy.system.framework.permission.core.handler.UserDetailsHandler;
-import cn.odboy.framework.properties.AppProperties;
-import cn.odboy.framework.exception.BadRequestException;
-import cn.odboy.framework.redis.RedisHelper;
 import cn.odboy.util.RsaEncryptUtil;
 import cn.odboy.util.StringUtil;
 import com.wf.captcha.base.Captcha;
@@ -99,7 +99,7 @@ public class SystemAuthController {
     @ApiOperation("获取用户信息")
     @PostMapping(value = "/info")
     public ResponseEntity getUserInfo() {
-        SystemUserJwtVo jwtUser = (SystemUserJwtVo) SecurityHelper.getCurrentUser();
+        SystemUserJwtVo jwtUser = (SystemUserJwtVo) CsSecurityHelper.getCurrentUser();
         SystemUserInfoVo userInfoVo = BeanUtil.copyProperties(jwtUser, SystemUserInfoVo.class);
         return ResponseEntity.ok(userInfoVo);
     }
@@ -110,7 +110,7 @@ public class SystemAuthController {
         // 获取运算的结果
         Captcha captcha = properties.getLogin().getCaptchaSetting().getCaptcha();
         String uuid = SystemRedisKey.CAPTCHA_LOGIN + IdUtil.simpleUUID();
-        //当验证码类型为 arithmetic时且长度 >= 2 时,captcha.text()的结果有几率为浮点型
+        //当验证码类型为 arithmetic时且长度 >= 2 时, captcha.text()的结果有几率为浮点型
         String captchaValue = captcha.text();
         if (captcha.getCharType() - 1 == CaptchaCodeEnum.ARITHMETIC.ordinal() && captchaValue.contains(SystemConst.SYMBOL_DOT)) {
             captchaValue = captchaValue.split("\\.")[0];
diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemCaptchaController.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemCaptchaController.java
index 148a166e..b53febaa 100644
--- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemCaptchaController.java
+++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemCaptchaController.java
@@ -18,7 +18,7 @@ import org.springframework.web.bind.annotation.*;
 public class SystemCaptchaController {
     private final SystemEmailService systemEmailService;
 
-    @ApiOperation("重置邮箱,发送验证码")
+    @ApiOperation("重置邮箱, 发送验证码")
     @PostMapping(value = "/sendResetEmailCaptcha")
     public ResponseEntity sendResetEmailCaptcha(@RequestParam String email) {
         systemEmailService.sendCaptcha(SystemCaptchaBizEnum.EMAIL_RESET_EMAIL_CODE, email);
diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemDeptController.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemDeptController.java
index 23085802..4a4c5b85 100644
--- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemDeptController.java
+++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemDeptController.java
@@ -3,8 +3,8 @@ package cn.odboy.system.controller;
 import cn.odboy.base.CsPageArgs;
 import cn.odboy.base.CsResultVo;
 import cn.odboy.system.dal.dataobject.SystemDeptTb;
-import cn.odboy.system.dal.model.CreateSystemDeptArgs;
-import cn.odboy.system.dal.model.QuerySystemDeptArgs;
+import cn.odboy.system.dal.model.SystemCreateDeptArgs;
+import cn.odboy.system.dal.model.SystemQueryDeptArgs;
 import cn.odboy.system.service.SystemDeptService;
 import cn.odboy.util.CsPageUtil;
 import io.swagger.annotations.Api;
@@ -33,15 +33,15 @@ public class SystemDeptController {
     @ApiOperation("导出部门数据")
     @GetMapping(value = "/download")
     @PreAuthorize("@el.check('dept:list')")
-    public void exportDept(HttpServletResponse response, QuerySystemDeptArgs criteria) throws Exception {
+    public void exportDept(HttpServletResponse response, SystemQueryDeptArgs criteria) throws Exception {
         systemDeptService.exportDeptExcel(systemDeptService.queryAllDept(criteria, false), response);
     }
 
     @ApiOperation("查询部门")
     @PostMapping
     @PreAuthorize("@el.check('user:list','dept:list')")
-    public ResponseEntity>> queryDept(@Validated @RequestBody CsPageArgs args) throws Exception {
-        QuerySystemDeptArgs criteria = args.getArgs();
+    public ResponseEntity>> queryDept(@Validated @RequestBody CsPageArgs args) throws Exception {
+        SystemQueryDeptArgs criteria = args.getArgs();
         List depts = systemDeptService.queryAllDept(criteria, true);
         return new ResponseEntity<>(CsPageUtil.toPage(depts), HttpStatus.OK);
     }
@@ -62,7 +62,7 @@ public class SystemDeptController {
                         data.setSubCount(data.getSubCount() - 1);
                     }
                 }
-                // 编辑部门时不显示自己以及自己下级的数据,避免出现PID数据环形问题
+                // 编辑部门时不显示自己以及自己下级的数据, 避免出现PID数据环形问题
                 depts = depts.stream().filter(i -> !ids.contains(i.getId())).collect(Collectors.toList());
             }
             deptSet.addAll(depts);
@@ -73,7 +73,7 @@ public class SystemDeptController {
     @ApiOperation("新增部门")
     @PostMapping(value = "/saveDept")
     @PreAuthorize("@el.check('dept:add')")
-    public ResponseEntity saveDept(@Validated @RequestBody CreateSystemDeptArgs resources) {
+    public ResponseEntity saveDept(@Validated @RequestBody SystemCreateDeptArgs resources) {
         systemDeptService.saveDept(resources);
         return new ResponseEntity<>(HttpStatus.CREATED);
     }
@@ -90,7 +90,7 @@ public class SystemDeptController {
     @PostMapping(value = "/removeDeptByIds")
     @PreAuthorize("@el.check('dept:del')")
     public ResponseEntity removeDeptByIds(@RequestBody Set ids) {
-        // 获取部门,和其所有子部门
+        // 获取部门, 和其所有子部门
         Set depts = systemDeptService.traverseDeptByIdWithPids(ids);
         // 验证是否被角色或用户关联
         systemDeptService.verifyBindRelationByIds(depts);
diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemDictController.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemDictController.java
index 7f13bed5..57fb3d1b 100644
--- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemDictController.java
+++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemDictController.java
@@ -3,8 +3,8 @@ package cn.odboy.system.controller;
 import cn.odboy.base.CsPageArgs;
 import cn.odboy.base.CsResultVo;
 import cn.odboy.system.dal.dataobject.SystemDictTb;
-import cn.odboy.system.dal.model.CreateSystemDictArgs;
-import cn.odboy.system.dal.model.QuerySystemDictArgs;
+import cn.odboy.system.dal.model.SystemCreateDictArgs;
+import cn.odboy.system.dal.model.SystemQueryDictArgs;
 import cn.odboy.system.service.SystemDictService;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import io.swagger.annotations.Api;
@@ -31,7 +31,7 @@ public class SystemDictController {
     @ApiOperation("导出字典数据")
     @GetMapping(value = "/download")
     @PreAuthorize("@el.check('dict:list')")
-    public void exportDict(HttpServletResponse response, QuerySystemDictArgs criteria) throws IOException {
+    public void exportDict(HttpServletResponse response, SystemQueryDictArgs criteria) throws IOException {
         systemDictService.exportDictExcel(systemDictService.queryDictByArgs(criteria), response);
     }
 
@@ -39,14 +39,14 @@ public class SystemDictController {
     @PostMapping(value = "/queryAllDict")
     @PreAuthorize("@el.check('dict:list')")
     public ResponseEntity> queryAllDict() {
-        return new ResponseEntity<>(systemDictService.queryDictByArgs(new QuerySystemDictArgs()), HttpStatus.OK);
+        return new ResponseEntity<>(systemDictService.queryDictByArgs(new SystemQueryDictArgs()), HttpStatus.OK);
     }
 
     @ApiOperation("查询字典")
     @PostMapping
     @PreAuthorize("@el.check('dict:list')")
-    public ResponseEntity>> queryDictByArgs(@Validated @RequestBody CsPageArgs args) {
-        QuerySystemDictArgs criteria = args.getArgs();
+    public ResponseEntity>> queryDictByArgs(@Validated @RequestBody CsPageArgs args) {
+        SystemQueryDictArgs criteria = args.getArgs();
         Page page = new Page<>(criteria.getPage(), criteria.getSize());
         return new ResponseEntity<>(systemDictService.queryDictByArgs(criteria, page), HttpStatus.OK);
     }
@@ -54,7 +54,7 @@ public class SystemDictController {
     @ApiOperation("新增字典")
     @PostMapping(value = "/saveDict")
     @PreAuthorize("@el.check('dict:add')")
-    public ResponseEntity saveDict(@Validated @RequestBody CreateSystemDictArgs resources) {
+    public ResponseEntity saveDict(@Validated @RequestBody SystemCreateDictArgs resources) {
         systemDictService.saveDict(resources);
         return new ResponseEntity<>(HttpStatus.CREATED);
     }
diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemDictDetailController.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemDictDetailController.java
index 2285e980..33773ace 100644
--- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemDictDetailController.java
+++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemDictDetailController.java
@@ -3,8 +3,8 @@ package cn.odboy.system.controller;
 import cn.odboy.base.CsPageArgs;
 import cn.odboy.base.CsResultVo;
 import cn.odboy.system.dal.dataobject.SystemDictDetailTb;
-import cn.odboy.system.dal.model.CreateSystemDictDetailArgs;
-import cn.odboy.system.dal.model.QuerySystemDictDetailArgs;
+import cn.odboy.system.dal.model.SystemCreateDictDetailArgs;
+import cn.odboy.system.dal.model.SystemQueryDictDetailArgs;
 import cn.odboy.system.service.SystemDictDetailService;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import io.swagger.annotations.Api;
@@ -29,14 +29,14 @@ public class SystemDictDetailController {
 
     @ApiOperation("查询字典详情")
     @PostMapping
-    public ResponseEntity>> queryDictDetailByCrud(@Validated @RequestBody CsPageArgs args) {
+    public ResponseEntity>> queryDictDetailByCrud(@Validated @RequestBody CsPageArgs args) {
         return queryDictDetailByArgs(args);
     }
 
     @ApiOperation("查询字典详情")
     @PostMapping(value = "/queryDictDetailByArgs")
-    public ResponseEntity>> queryDictDetailByArgs(@Validated @RequestBody CsPageArgs args) {
-        QuerySystemDictDetailArgs criteria = args.getArgs();
+    public ResponseEntity>> queryDictDetailByArgs(@Validated @RequestBody CsPageArgs args) {
+        SystemQueryDictDetailArgs criteria = args.getArgs();
         Page page = new Page<>(criteria.getPage(), criteria.getSize());
         return new ResponseEntity<>(systemDictDetailService.queryDictDetailByArgs(criteria, page), HttpStatus.OK);
     }
@@ -44,7 +44,7 @@ public class SystemDictDetailController {
     @ApiOperation("查询多个字典详情")
     @GetMapping(value = "/getDictDetailMaps")
     public ResponseEntity>> getDictDetailMaps(@RequestParam String dictName) {
-        String[] names = dictName.split("[,,]");
+        String[] names = dictName.split("[,, ]");
         Map> dictMap = new HashMap<>(16);
         for (String name : names) {
             dictMap.put(name, systemDictDetailService.queryDictDetailByName(name));
@@ -55,7 +55,7 @@ public class SystemDictDetailController {
     @ApiOperation("新增字典详情")
     @PostMapping(value = "/saveDictDetail")
     @PreAuthorize("@el.check('dict:add')")
-    public ResponseEntity saveDictDetail(@Validated @RequestBody CreateSystemDictDetailArgs resources) {
+    public ResponseEntity saveDictDetail(@Validated @RequestBody SystemCreateDictDetailArgs resources) {
         systemDictDetailService.saveDictDetail(resources);
         return new ResponseEntity<>(HttpStatus.CREATED);
     }
diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemEmailController.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemEmailController.java
index 16f3798a..4bf730f5 100644
--- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemEmailController.java
+++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemEmailController.java
@@ -1,7 +1,7 @@
 package cn.odboy.system.controller;
 
 import cn.odboy.system.dal.dataobject.SystemEmailConfigTb;
-import cn.odboy.system.dal.model.SendSystemEmailArgs;
+import cn.odboy.system.dal.model.SystemSendEmailArgs;
 import cn.odboy.system.service.SystemEmailService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -39,7 +39,7 @@ public class SystemEmailController {
 
     @ApiOperation("发送邮件")
     @PostMapping(value = "/sendEmail")
-    public ResponseEntity sendEmail(@Validated @RequestBody SendSystemEmailArgs sendEmailRequest) {
+    public ResponseEntity sendEmail(@Validated @RequestBody SystemSendEmailArgs sendEmailRequest) {
         systemEmailService.sendEmail(sendEmailRequest);
         return new ResponseEntity<>(HttpStatus.OK);
     }
diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemJobController.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemJobController.java
index aa338ea3..c4797ff3 100644
--- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemJobController.java
+++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemJobController.java
@@ -3,8 +3,8 @@ package cn.odboy.system.controller;
 import cn.odboy.base.CsPageArgs;
 import cn.odboy.base.CsResultVo;
 import cn.odboy.system.dal.dataobject.SystemJobTb;
-import cn.odboy.system.dal.model.CreateSystemJobArgs;
-import cn.odboy.system.dal.model.QuerySystemJobArgs;
+import cn.odboy.system.dal.model.SystemCreateJobArgs;
+import cn.odboy.system.dal.model.SystemQueryJobArgs;
 import cn.odboy.system.service.SystemJobService;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import io.swagger.annotations.Api;
@@ -32,15 +32,15 @@ public class SystemJobController {
     @ApiOperation("导出岗位数据")
     @GetMapping(value = "/download")
     @PreAuthorize("@el.check('job:list')")
-    public void exportJob(HttpServletResponse response, QuerySystemJobArgs criteria) throws IOException {
+    public void exportJob(HttpServletResponse response, SystemQueryJobArgs criteria) throws IOException {
         systemJobService.exportJobExcel(systemJobService.queryJobByArgs(criteria), response);
     }
 
     @ApiOperation("查询岗位")
     @PostMapping(value = "/queryAllEnableJob")
     @PreAuthorize("@el.check('job:list','user:list')")
-    public ResponseEntity>> queryJobByArgs(@Validated @RequestBody CsPageArgs args) {
-        QuerySystemJobArgs criteria = args.getArgs();
+    public ResponseEntity>> queryJobByArgs(@Validated @RequestBody CsPageArgs args) {
+        SystemQueryJobArgs criteria = args.getArgs();
         Page page = new Page<>(criteria.getPage(), criteria.getSize());
         return new ResponseEntity<>(systemJobService.queryJobByArgs(criteria, page), HttpStatus.OK);
     }
@@ -48,14 +48,14 @@ public class SystemJobController {
     @ApiOperation("查询岗位")
     @PostMapping
     @PreAuthorize("@el.check('job:list','user:list')")
-    public ResponseEntity>> queryJobByCrud(@Validated @RequestBody CsPageArgs args) {
+    public ResponseEntity>> queryJobByCrud(@Validated @RequestBody CsPageArgs args) {
         return queryJobByArgs(args);
     }
 
     @ApiOperation("新增岗位")
     @PostMapping(value = "/saveJob")
     @PreAuthorize("@el.check('job:add')")
-    public ResponseEntity saveJob(@Validated @RequestBody CreateSystemJobArgs resources) {
+    public ResponseEntity saveJob(@Validated @RequestBody SystemCreateJobArgs resources) {
         systemJobService.saveJob(resources);
         return new ResponseEntity<>(HttpStatus.CREATED);
     }
diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemLocalStorageController.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemLocalStorageController.java
index cd84196d..120688d5 100644
--- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemLocalStorageController.java
+++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemLocalStorageController.java
@@ -3,10 +3,10 @@ package cn.odboy.system.controller;
 import cn.odboy.base.CsPageArgs;
 import cn.odboy.base.CsResultVo;
 import cn.odboy.constant.FileTypeEnum;
-import cn.odboy.system.dal.dataobject.SystemLocalStorageTb;
-import cn.odboy.system.dal.model.QuerySystemLocalStorageArgs;
-import cn.odboy.system.service.SystemLocalStorageService;
 import cn.odboy.framework.exception.BadRequestException;
+import cn.odboy.system.dal.dataobject.SystemLocalStorageTb;
+import cn.odboy.system.dal.model.SystemQueryStorageArgs;
+import cn.odboy.system.service.SystemLocalStorageService;
 import cn.odboy.util.FileUtil;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import io.swagger.annotations.Api;
@@ -33,8 +33,8 @@ public class SystemLocalStorageController {
     @ApiOperation("查询文件")
     @PostMapping
     @PreAuthorize("@el.check('storage:list')")
-    public ResponseEntity>> queryLocalStorage(@Validated @RequestBody CsPageArgs args) {
-        QuerySystemLocalStorageArgs criteria = args.getArgs();
+    public ResponseEntity>> queryLocalStorage(@Validated @RequestBody CsPageArgs args) {
+        SystemQueryStorageArgs criteria = args.getArgs();
         Page page = new Page<>(criteria.getPage(), criteria.getSize());
         return new ResponseEntity<>(localStorageService.queryLocalStorage(criteria, page), HttpStatus.OK);
     }
@@ -42,7 +42,7 @@ public class SystemLocalStorageController {
     @ApiOperation("导出数据")
     @GetMapping(value = "/download")
     @PreAuthorize("@el.check('storage:list')")
-    public void exportFile(HttpServletResponse response, QuerySystemLocalStorageArgs criteria) throws IOException {
+    public void exportFile(HttpServletResponse response, SystemQueryStorageArgs criteria) throws IOException {
         localStorageService.exportLocalStorageExcel(localStorageService.queryLocalStorage(criteria), response);
     }
 
diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemMenuController.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemMenuController.java
index bc4a632b..1004c831 100644
--- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemMenuController.java
+++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemMenuController.java
@@ -3,12 +3,12 @@ package cn.odboy.system.controller;
 import cn.hutool.core.collection.CollectionUtil;
 import cn.odboy.base.CsPageArgs;
 import cn.odboy.base.CsResultVo;
-import cn.odboy.system.dal.dataobject.SystemMenuTb;
-import cn.odboy.system.dal.model.QuerySystemMenuArgs;
-import cn.odboy.system.dal.model.SystemMenuVo;
-import cn.odboy.system.framework.permission.core.SecurityHelper;
-import cn.odboy.system.service.SystemMenuService;
 import cn.odboy.framework.exception.BadRequestException;
+import cn.odboy.system.dal.dataobject.SystemMenuTb;
+import cn.odboy.system.dal.model.SystemMenuVo;
+import cn.odboy.system.dal.model.SystemQueryMenuArgs;
+import cn.odboy.system.framework.permission.core.CsSecurityHelper;
+import cn.odboy.system.service.SystemMenuService;
 import cn.odboy.util.CsPageUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -34,14 +34,14 @@ public class SystemMenuController {
     @ApiOperation("导出菜单数据")
     @GetMapping(value = "/download")
     @PreAuthorize("@el.check('menu:list')")
-    public void exportMenu(HttpServletResponse response, QuerySystemMenuArgs criteria) throws Exception {
+    public void exportMenu(HttpServletResponse response, SystemQueryMenuArgs criteria) throws Exception {
         systemMenuService.exportMenuExcel(systemMenuService.queryAllMenu(criteria, false), response);
     }
 
     @PostMapping(value = "/buildMenus")
     @ApiOperation("获取前端所需菜单")
     public ResponseEntity> buildMenus() {
-        List menuList = systemMenuService.queryMenuListByUserId(SecurityHelper.getCurrentUserId());
+        List menuList = systemMenuService.queryMenuListByUserId(CsSecurityHelper.getCurrentUserId());
         List menus = systemMenuService.buildMenuTree(menuList);
         return new ResponseEntity<>(systemMenuService.buildMenuVo(menus), HttpStatus.OK);
     }
@@ -53,7 +53,7 @@ public class SystemMenuController {
         return new ResponseEntity<>(systemMenuService.queryMenuByPid(pid), HttpStatus.OK);
     }
 
-    @ApiOperation("根据菜单ID返回所有子节点ID,包含自身ID")
+    @ApiOperation("根据菜单ID返回所有子节点ID, 包含自身ID")
     @PostMapping(value = "/queryChildMenuSet")
     @PreAuthorize("@el.check('menu:list','roles:list')")
     public ResponseEntity> queryChildMenuSet(@RequestParam Long id) {
@@ -68,15 +68,15 @@ public class SystemMenuController {
     @PostMapping
     @ApiOperation("查询菜单")
     @PreAuthorize("@el.check('menu:list')")
-    public ResponseEntity>> queryAllMenuByCrud(@Validated @RequestBody CsPageArgs args) throws Exception {
+    public ResponseEntity>> queryAllMenuByCrud(@Validated @RequestBody CsPageArgs args) throws Exception {
         return queryAllMenu(args);
     }
 
     @PostMapping(value = "/queryMenuByArgs")
     @ApiOperation("查询菜单")
     @PreAuthorize("@el.check('menu:list')")
-    public ResponseEntity>> queryAllMenu(@Validated @RequestBody CsPageArgs args) throws Exception {
-        QuerySystemMenuArgs criteria = args.getArgs();
+    public ResponseEntity>> queryAllMenu(@Validated @RequestBody CsPageArgs args) throws Exception {
+        SystemQueryMenuArgs criteria = args.getArgs();
         List menuList = systemMenuService.queryAllMenu(criteria, true);
         return new ResponseEntity<>(CsPageUtil.toPage(menuList), HttpStatus.OK);
     }
@@ -97,7 +97,7 @@ public class SystemMenuController {
                 }
                 menus.addAll(menuList);
             }
-            // 编辑菜单时不显示自己以及自己下级的数据,避免出现PID数据环形问题
+            // 编辑菜单时不显示自己以及自己下级的数据, 避免出现PID数据环形问题
             menus = menus.stream().filter(i -> !ids.contains(i.getId())).collect(Collectors.toSet());
             return new ResponseEntity<>(systemMenuService.buildMenuTree(new ArrayList<>(menus)), HttpStatus.OK);
         }
diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemOssStorageController.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemOssStorageController.java
new file mode 100644
index 00000000..48cf44c1
--- /dev/null
+++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemOssStorageController.java
@@ -0,0 +1,228 @@
+package cn.odboy.system.controller;
+
+import cn.odboy.base.CsPageArgs;
+import cn.odboy.base.CsResultVo;
+import cn.odboy.system.dal.dataobject.SystemOssStorageTb;
+import cn.odboy.system.dal.model.SystemOssStorageVo;
+import cn.odboy.system.dal.model.SystemQueryStorageArgs;
+import cn.odboy.system.service.SystemOssStorageService;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.List;
+
+@Slf4j
+@RestController
+@RequiredArgsConstructor
+@Api(tags = "工具:OSS存储管理")
+@RequestMapping("/api/ossStorage")
+public class SystemOssStorageController {
+    private final SystemOssStorageService systemOssStorageService;
+
+    @ApiOperation("查询文件")
+    @PostMapping
+    @PreAuthorize("@el.check('storage:list')")
+    public ResponseEntity>> queryOssStorage(@Validated @RequestBody CsPageArgs args) {
+        SystemQueryStorageArgs criteria = args.getArgs();
+        Page page = new Page<>(criteria.getPage(), criteria.getSize());
+        return new ResponseEntity<>(systemOssStorageService.queryOssStorage(criteria, page), HttpStatus.OK);
+    }
+
+    @ApiOperation("导出数据")
+    @GetMapping(value = "/download")
+    @PreAuthorize("@el.check('storage:list')")
+    public void exportFile(HttpServletResponse response, SystemQueryStorageArgs criteria) throws IOException {
+        systemOssStorageService.exportOssStorageExcel(systemOssStorageService.queryOssStorage(criteria), response);
+    }
+
+    @ApiOperation("上传文件")
+    @PostMapping(value = "/uploadFile")
+    @PreAuthorize("@el.check('storage:add')")
+    public ResponseEntity uploadFile(@RequestParam String name, @RequestParam("file") MultipartFile file) {
+        systemOssStorageService.uploadFile(name, file);
+        return new ResponseEntity<>(HttpStatus.CREATED);
+    }
+
+    @ApiOperation("多选删除")
+    @PostMapping(value = "/removeFileByIds")
+    public ResponseEntity removeFileByIds(@RequestBody Long[] ids) {
+        systemOssStorageService.removeFileByIds(ids);
+        return new ResponseEntity<>(HttpStatus.OK);
+    }
+
+//    @ApiOperation(value = "图片/视频预览")
+//    @GetMapping("/preview-file")
+//    public ResponseEntity previewFile(@RequestParam("fileName") String fileName) {
+//        // 校验文件名是否有效
+//        if (StrUtil.isBlank(fileName)) {
+//            log.warn("文件名为空,无法生成预签名 URL");
+//            return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("文件名为空,无法生成预签名 URL");
+//        }
+//
+//        // 确保文件名包含完整的路径(例如:2025/04/28/78bda88f-ff2d-4c4f-9756-397c62c3771f.jpg)
+//        if (!fileName.contains("/")) {
+//            log.warn("请检查文件名是否正确,无法生成预签名 URL");
+//            return null;
+//        }
+//        // 创建返回 map
+//        Map res = new HashMap<>();
+//        // 生成 1 小时有效的预签名 URL
+//        try {
+//            GetPresignedObjectUrlArgs presignedUrlArgs = GetPresignedObjectUrlArgs.builder()
+//                    // 获取 bucket 名称
+//                    .bucket(properties.getOss().getMinio().getBucketName())
+//                    // 使用完整路径
+//                    .object(fileName)
+//                    // 设置方法为 GET(读取文件)
+//                    .method(Method.GET)
+//                    // 设置 URL 过期时间为 1 小时 1*60*60
+//                    .expiry(3600).build();
+//
+//            // 获取预签名 URL
+//            String url = minioClient.getPresignedObjectUrl(presignedUrlArgs);
+//            res.put("data", url);
+//            // 记录生成的 URL
+//            log.info("生成预签名 URL 成功,fileName: {}, url: {}", fileName, url);
+//        } catch (Exception e) {
+//            log.error("生成预签名 URL 失败,fileName: {}", fileName, e);
+//        }
+//        res.put("code", HttpStatus.OK.value());
+//        res.put("msg", "上传成功");
+//        return ResponseEntity.status(HttpStatus.OK).body(res);
+//    }
+//
+//    /**
+//     * 存储桶存在
+//     *
+//     * @param bucketName 存储桶名称
+//     * @return {@link ResponseEntity }<{@link Object }>
+//     */
+//    @ApiOperation(value = "查看存储bucket是否存在")
+//    @GetMapping("/bucketExists")
+//    public ResponseEntity bucketExists(@RequestParam("bucketName") String bucketName) {
+//        return ResponseEntity.status(HttpStatus.OK).body("查看存储bucket是否存在 bucketName : " + minioRepository.bucketExists(bucketName));
+//    }
+//
+//    /**
+//     * 制作桶
+//     *
+//     * @param bucketName 存储桶名称
+//     * @return {@link ResponseEntity }<{@link Object }>
+//     */
+//    @ApiOperation(value = "创建存储bucket")
+//    @GetMapping("/makeBucket")
+//    public ResponseEntity makeBucket(String bucketName) {
+//        return ResponseEntity.status(HttpStatus.OK).body("创建存储bucket bucketName : " + minioRepository.makeBucket(bucketName));
+//    }
+//
+//    /**
+//     * 删除存储桶
+//     *
+//     * @param bucketName 存储桶名称
+//     * @return {@link ResponseEntity }<{@link Object }>
+//     */
+//    @ApiOperation(value = "删除存储bucket")
+//    @GetMapping("/removeBucket")
+//    public ResponseEntity removeBucket(String bucketName) {
+//        return ResponseEntity.status(HttpStatus.OK).body("删除存储bucket bucketName : " + minioRepository.removeBucket(bucketName));
+//    }
+//
+//    /**
+//     * 获取所有存储桶
+//     *
+//     * @return {@link ResponseEntity }<{@link Object }>
+//     */
+//    @ApiOperation(value = "获取全部bucket")
+//    @GetMapping("/queryAllBuckets")
+//    public ResponseEntity queryAllBuckets() {
+//        List allBuckets = minioRepository.queryAllBuckets();
+//        // 获取名称 allBuckets.forEach(bucket -> log.info(bucket.name()));
+//        List bucketNames = allBuckets.stream().map(Bucket::name).collect(Collectors.toList());
+//        HashMap response = new HashMap<>();
+//        response.put("data", bucketNames);
+//        response.put("code", HttpStatus.OK.value());
+//        response.put("msg", "获取全部bucket成功");
+//        return ResponseEntity.status(HttpStatus.OK).body(response);
+//    }
+//
+//    /**
+//     * 上传
+//     *
+//     * @param file 文件
+//     * @return {@link ResponseEntity }<{@link Object }>
+//     */
+//    @ApiOperation(value = "文件上传返回url")
+//    @PostMapping("/upload")
+//    public ResponseEntity upload(@RequestParam("file") MultipartFile file) {
+//        if (file.isEmpty()) {
+//            return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("文件不能为空");
+//        }
+//        String objectName = minioRepository.upload(file);
+//        if (null != objectName) {
+//            HashMap response = new HashMap<>();
+//            response.put("data", (properties.getOss().getMinio().getEndpoint() + "/" + properties.getOss().getMinio().getBucketName() + "/" + objectName));
+//            response.put("code", HttpStatus.OK.value());
+//            response.put("msg", "上传成功");
+//            return ResponseEntity.status(HttpStatus.OK).body(response);
+//        }
+//        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("文件上传失败");
+//    }
+//
+//    /**
+//     * 文件上传
+//     *
+//     * @param file 文件
+//     * @return 文件在Minio中的路径
+//     */
+//    @ApiOperation(value = "文件上传返回url")
+//    @PostMapping("/upload")
+//    public ResponseEntity upload(MultipartFile file) {
+//        String originalFilename = file.getOriginalFilename();
+//        if (StrUtil.isBlank(originalFilename)) {
+//            throw new RuntimeException("文件名为空");
+//        }
+//        String fileExtension = FileUtil.getSuffix(originalFilename);
+//        // 使用UUID确保文件名唯一
+//        String fileName = UUID.randomUUID() + fileExtension;
+//        // 使用日期加上文件名,方便分类
+//        String objectName = CsDateUtil.getNowDateTimeMsStr() + "/" + fileName;
+//
+//        log.info("准备上传文件,objectName: {}", objectName);
+//
+//        // 通过更大缓冲区和流优化上传文件
+//        try (InputStream fileInputStream = file.getInputStream()) {
+//            // 上传前记录文件大小和类型
+//            long fileSize = file.getSize();
+//            log.info("上传文件大小:{} 字节, 文件类型:{}", fileSize, file.getContentType());
+//            PutObjectArgs objectArgs = PutObjectArgs.builder()
+//                    .bucket(properties.getOss().getMinio().getBucketName())
+//                    .object(objectName)
+//                    .stream(fileInputStream, fileSize, -1)
+//                    .contentType(file.getContentType())
+//                    .build();
+//            minioClient.putObject(objectArgs);
+//            log.info("文件上传成功,objectName: {}", objectName);
+//            HashMap response = new HashMap<>();
+//            response.put("data", (properties.getOss().getMinio().getEndpoint() + "/" + properties.getOss().getMinio().getBucketName() + "/" + objectName));
+//            response.put("code", HttpStatus.OK.value());
+//            response.put("msg", "上传成功");
+//            return ResponseEntity.status(HttpStatus.OK).body(response);
+//        } catch (IOException e) {
+//            log.error("上传文件失败,objectName: {}", objectName, e);
+//            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("文件上传失败");
+//        } catch (Exception e) {
+//            throw new RuntimeException(e);
+//        }
+//    }
+}
diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemQiniuController.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemQiniuController.java
deleted file mode 100644
index 47eb7778..00000000
--- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemQiniuController.java
+++ /dev/null
@@ -1,106 +0,0 @@
-package cn.odboy.system.controller;
-
-import cn.odboy.base.CsPageArgs;
-import cn.odboy.base.CsResultVo;
-import cn.odboy.system.dal.dataobject.SystemQiniuConfigTb;
-import cn.odboy.system.dal.dataobject.SystemQiniuContentTb;
-import cn.odboy.system.dal.model.QuerySystemQiniuArgs;
-import cn.odboy.system.service.SystemQiniuConfigService;
-import cn.odboy.system.service.SystemQiniuContentService;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 发送邮件
- */
-@Slf4j
-@RestController
-@RequiredArgsConstructor
-@RequestMapping("/api/qiNiuContent")
-@Api(tags = "工具:七牛云存储管理")
-public class SystemQiniuController {
-    private final SystemQiniuContentService qiniuContentService;
-    private final SystemQiniuConfigService qiNiuConfigService;
-
-    @ApiOperation("查询七牛云存储配置")
-    @PostMapping(value = "/queryQiniuConfig")
-    public ResponseEntity queryQiniuConfig() {
-        return new ResponseEntity<>(qiNiuConfigService.getLastQiniuConfig(), HttpStatus.OK);
-    }
-
-    @ApiOperation("配置七牛云存储")
-    @PostMapping(value = "/modifyQiniuConfig")
-    public ResponseEntity modifyQiniuConfig(@Validated @RequestBody SystemQiniuConfigTb qiniuConfig) {
-        qiNiuConfigService.saveQiniuConfig(qiniuConfig);
-        qiNiuConfigService.modifyQiniuConfigType(qiniuConfig.getType());
-        return new ResponseEntity<>(HttpStatus.OK);
-    }
-
-    @ApiOperation("导出数据")
-    @GetMapping(value = "/download")
-    public void exportQiNiu(HttpServletResponse response, QuerySystemQiniuArgs criteria) throws IOException {
-        qiniuContentService.exportQiniuContentExcel(qiniuContentService.queryQiniuContentByArgs(criteria), response);
-    }
-
-    @ApiOperation("查询文件")
-    @PostMapping
-    public ResponseEntity>> queryQiniuContentByArgs(@Validated @RequestBody CsPageArgs args) {
-        QuerySystemQiniuArgs criteria = args.getArgs();
-        Page page = new Page<>(criteria.getPage(), criteria.getSize());
-        return new ResponseEntity<>(qiniuContentService.queryQiniuContentByArgs(criteria, page), HttpStatus.OK);
-    }
-
-    @ApiOperation("上传文件")
-    @PostMapping("/uploadFile")
-    public ResponseEntity> uploadFile(@RequestParam MultipartFile file) {
-        SystemQiniuContentTb qiniuContent = qiniuContentService.uploadFile(file);
-        Map map = new HashMap<>(3);
-        map.put("id", qiniuContent.getId());
-        map.put("errno", 0);
-        map.put("data", new String[]{qiniuContent.getUrl()});
-        return new ResponseEntity<>(map, HttpStatus.OK);
-    }
-
-    @ApiOperation("同步七牛云数据")
-    @PostMapping(value = "/synchronize")
-    public ResponseEntity synchronizeQiNiu() {
-        qiniuContentService.synchronize();
-        return new ResponseEntity<>(HttpStatus.OK);
-    }
-
-    @ApiOperation("下载文件")
-    @GetMapping(value = "/createFilePreviewUrl/{id}")
-    public ResponseEntity> createFilePreviewUrl(@PathVariable Long id) {
-        Map map = new HashMap<>(1);
-        map.put("url", qiniuContentService.createFilePreviewUrl(qiniuContentService.getQiniuContentById(id)));
-        return new ResponseEntity<>(map, HttpStatus.OK);
-    }
-
-    @ApiOperation("删除文件")
-    @DeleteMapping(value = "/{id}")
-    public ResponseEntity deleteQiNiu(@PathVariable Long id) {
-        qiniuContentService.removeFileById(id);
-        return new ResponseEntity<>(HttpStatus.OK);
-    }
-
-    @ApiOperation("删除多张图片")
-    @PostMapping(value = "/removeFileByIds")
-    public ResponseEntity removeFileByIds(@RequestBody Long[] ids) {
-        qiniuContentService.removeFileByIds(ids);
-        return new ResponseEntity<>(HttpStatus.OK);
-    }
-}
diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemQuartzJobController.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemQuartzJobController.java
index 6ea59720..7776d5a4 100644
--- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemQuartzJobController.java
+++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemQuartzJobController.java
@@ -3,12 +3,12 @@ package cn.odboy.system.controller;
 import cn.odboy.base.CsPageArgs;
 import cn.odboy.base.CsResultVo;
 import cn.odboy.framework.context.SpringBeanHolder;
+import cn.odboy.framework.exception.BadRequestException;
 import cn.odboy.system.dal.dataobject.SystemQuartzJobTb;
 import cn.odboy.system.dal.dataobject.SystemQuartzLogTb;
-import cn.odboy.system.dal.model.QuerySystemQuartzJobArgs;
-import cn.odboy.system.dal.model.UpdateSystemQuartzJobArgs;
+import cn.odboy.system.dal.model.SystemQueryQuartzJobArgs;
+import cn.odboy.system.dal.model.SystemUpdateQuartzJobArgs;
 import cn.odboy.system.service.SystemQuartzJobService;
-import cn.odboy.framework.exception.BadRequestException;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -37,8 +37,8 @@ public class SystemQuartzJobController {
     @ApiOperation("查询定时任务")
     @PostMapping
     @PreAuthorize("@el.check('quartzJob:list')")
-    public ResponseEntity>> queryQuartzJobByCrud(@Validated @RequestBody CsPageArgs args) {
-        QuerySystemQuartzJobArgs criteria = args.getArgs();
+    public ResponseEntity>> queryQuartzJobByCrud(@Validated @RequestBody CsPageArgs args) {
+        SystemQueryQuartzJobArgs criteria = args.getArgs();
         Page page = new Page<>(criteria.getPage(), criteria.getSize());
         return new ResponseEntity<>(systemQuartzJobService.queryQuartzJobByArgs(criteria, page), HttpStatus.OK);
     }
@@ -46,21 +46,21 @@ public class SystemQuartzJobController {
     @ApiOperation("导出任务数据")
     @GetMapping(value = "/download")
     @PreAuthorize("@el.check('quartzJob:list')")
-    public void exportQuartzJob(HttpServletResponse response, QuerySystemQuartzJobArgs criteria) throws IOException {
+    public void exportQuartzJob(HttpServletResponse response, SystemQueryQuartzJobArgs criteria) throws IOException {
         systemQuartzJobService.exportQuartzJobExcel(systemQuartzJobService.queryQuartzJobByArgs(criteria), response);
     }
 
     @ApiOperation("导出日志数据")
     @GetMapping(value = "/logs/download")
     @PreAuthorize("@el.check('quartzJob:list')")
-    public void exportQuartzJobLog(HttpServletResponse response, QuerySystemQuartzJobArgs criteria) throws IOException {
+    public void exportQuartzJobLog(HttpServletResponse response, SystemQueryQuartzJobArgs criteria) throws IOException {
         systemQuartzJobService.exportQuartzLogExcel(systemQuartzJobService.queryQuartzLogByArgs(criteria), response);
     }
 
     @ApiOperation("查询任务执行日志")
     @PostMapping(value = "/logs")
     @PreAuthorize("@el.check('quartzJob:list')")
-    public ResponseEntity>> queryQuartzJobLog(QuerySystemQuartzJobArgs criteria) {
+    public ResponseEntity>> queryQuartzJobLog(SystemQueryQuartzJobArgs criteria) {
         Page page = new Page<>(criteria.getPage(), criteria.getSize());
         return new ResponseEntity<>(systemQuartzJobService.queryQuartzLogByArgs(criteria, page), HttpStatus.OK);
     }
@@ -72,7 +72,7 @@ public class SystemQuartzJobController {
         if (resources.getId() != null) {
             throw new BadRequestException("无效参数id");
         }
-        // 验证Bean是不是合法的,合法的定时任务 Bean 需要用 @Service 定义
+        // 验证Bean是不是合法的, 合法的定时任务 Bean 需要用 @Service 定义
         checkBean(resources.getBeanName());
         systemQuartzJobService.createJob(resources);
         return new ResponseEntity<>(HttpStatus.CREATED);
@@ -81,8 +81,8 @@ public class SystemQuartzJobController {
     @ApiOperation("修改定时任务")
     @PutMapping
     @PreAuthorize("@el.check('quartzJob:edit')")
-    public ResponseEntity updateQuartzJob(@Validated(SystemQuartzJobTb.Update.class) @RequestBody UpdateSystemQuartzJobArgs resources) {
-        // 验证Bean是不是合法的,合法的定时任务 Bean 需要用 @Service 定义
+    public ResponseEntity updateQuartzJob(@Validated(SystemQuartzJobTb.Update.class) @RequestBody SystemUpdateQuartzJobArgs resources) {
+        // 验证Bean是不是合法的, 合法的定时任务 Bean 需要用 @Service 定义
         checkBean(resources.getBeanName());
         systemQuartzJobService.modifyQuartzJobResumeCron(resources);
         return new ResponseEntity<>(HttpStatus.NO_CONTENT);
@@ -113,7 +113,7 @@ public class SystemQuartzJobController {
     }
 
     /**
-     * 验证Bean是不是合法的,合法的定时任务 Bean 需要用 @Service 定义
+     * 验证Bean是不是合法的, 合法的定时任务 Bean 需要用 @Service 定义
      *
      * @param beanName Bean名称
      */
diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemRoleController.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemRoleController.java
index 0917ad5c..b1fc027f 100644
--- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemRoleController.java
+++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemRoleController.java
@@ -3,12 +3,12 @@ package cn.odboy.system.controller;
 import cn.hutool.core.lang.Dict;
 import cn.odboy.base.CsPageArgs;
 import cn.odboy.base.CsResultVo;
-import cn.odboy.system.dal.dataobject.SystemRoleTb;
-import cn.odboy.system.dal.model.CreateSystemRoleArgs;
-import cn.odboy.system.dal.model.QuerySystemRoleArgs;
-import cn.odboy.system.framework.permission.core.SecurityHelper;
-import cn.odboy.system.service.SystemRoleService;
 import cn.odboy.framework.exception.BadRequestException;
+import cn.odboy.system.dal.dataobject.SystemRoleTb;
+import cn.odboy.system.dal.model.SystemCreateRoleArgs;
+import cn.odboy.system.dal.model.SystemQueryRoleArgs;
+import cn.odboy.system.framework.permission.core.CsSecurityHelper;
+import cn.odboy.system.service.SystemRoleService;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -44,7 +44,7 @@ public class SystemRoleController {
     @ApiOperation("导出角色数据")
     @GetMapping(value = "/download")
     @PreAuthorize("@el.check('role:list')")
-    public void exportRole(HttpServletResponse response, QuerySystemRoleArgs criteria) throws IOException {
+    public void exportRole(HttpServletResponse response, SystemQueryRoleArgs criteria) throws IOException {
         systemRoleService.exportRoleExcel(systemRoleService.queryRoleByArgs(criteria), response);
     }
 
@@ -58,8 +58,8 @@ public class SystemRoleController {
     @ApiOperation("查询角色")
     @PostMapping
     @PreAuthorize("@el.check('roles:list')")
-    public ResponseEntity>> queryRoleByArgs(@Validated @RequestBody CsPageArgs args) {
-        QuerySystemRoleArgs criteria = args.getArgs();
+    public ResponseEntity>> queryRoleByArgs(@Validated @RequestBody CsPageArgs args) {
+        SystemQueryRoleArgs criteria = args.getArgs();
         Page page = new Page<>(criteria.getPage(), criteria.getSize());
         return new ResponseEntity<>(systemRoleService.queryRoleByArgs(criteria, page), HttpStatus.OK);
     }
@@ -73,7 +73,7 @@ public class SystemRoleController {
     @ApiOperation("新增角色")
     @PostMapping(value = "/saveRole")
     @PreAuthorize("@el.check('roles:add')")
-    public ResponseEntity saveRole(@Validated @RequestBody CreateSystemRoleArgs resources) {
+    public ResponseEntity saveRole(@Validated @RequestBody SystemCreateRoleArgs resources) {
         checkRoleLevels(resources.getLevel());
         systemRoleService.saveRole(resources);
         return new ResponseEntity<>(HttpStatus.CREATED);
@@ -118,11 +118,11 @@ public class SystemRoleController {
      * @return /
      */
     private int checkRoleLevels(Integer level) {
-        List levels = systemRoleService.queryRoleByUsersId(SecurityHelper.getCurrentUserId()).stream().map(SystemRoleTb::getLevel).collect(Collectors.toList());
+        List levels = systemRoleService.queryRoleByUsersId(CsSecurityHelper.getCurrentUserId()).stream().map(SystemRoleTb::getLevel).collect(Collectors.toList());
         int min = Collections.min(levels);
         if (level != null) {
             if (level < min) {
-                throw new BadRequestException("权限不足,你的角色级别:" + min + ",低于操作的角色级别:" + level);
+                throw new BadRequestException("权限不足, 你的角色级别:" + min + ", 低于操作的角色级别:" + level);
             }
         }
         return min;
diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemUserController.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemUserController.java
index 123c3767..e09cd743 100644
--- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemUserController.java
+++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemUserController.java
@@ -4,16 +4,16 @@ import cn.hutool.core.collection.CollectionUtil;
 import cn.odboy.base.CsPageArgs;
 import cn.odboy.base.CsResultVo;
 import cn.odboy.base.CsSelectOptionItemVo;
+import cn.odboy.framework.exception.BadRequestException;
+import cn.odboy.framework.properties.AppProperties;
 import cn.odboy.system.constant.SystemCaptchaBizEnum;
 import cn.odboy.system.dal.dataobject.SystemDeptTb;
 import cn.odboy.system.dal.dataobject.SystemRoleTb;
 import cn.odboy.system.dal.dataobject.SystemUserTb;
-import cn.odboy.system.dal.model.QuerySystemUserArgs;
-import cn.odboy.system.dal.model.UpdateSystemUserPasswordArgs;
-import cn.odboy.system.framework.permission.core.SecurityHelper;
-import cn.odboy.framework.properties.AppProperties;
+import cn.odboy.system.dal.model.SystemQueryUserArgs;
+import cn.odboy.system.dal.model.SystemUpdateUserPasswordArgs;
+import cn.odboy.system.framework.permission.core.CsSecurityHelper;
 import cn.odboy.system.service.*;
-import cn.odboy.framework.exception.BadRequestException;
 import cn.odboy.util.CsPageUtil;
 import cn.odboy.util.RsaEncryptUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -52,16 +52,16 @@ public class SystemUserController {
     @ApiOperation("导出用户数据")
     @GetMapping(value = "/download")
     @PreAuthorize("@el.check('user:list')")
-    public void exportUserExcel(HttpServletResponse response, QuerySystemUserArgs criteria) throws IOException {
+    public void exportUserExcel(HttpServletResponse response, SystemQueryUserArgs criteria) throws IOException {
         systemUserService.exportUserExcel(systemUserService.queryUserByArgs(criteria), response);
     }
 
     @ApiOperation("查询用户")
     @PostMapping
     @PreAuthorize("@el.check('user:list')")
-    public ResponseEntity>> queryUserByArgs(@Validated @RequestBody CsPageArgs args) {
+    public ResponseEntity>> queryUserByArgs(@Validated @RequestBody CsPageArgs args) {
         Page page = new Page<>(args.getPage(), args.getSize());
-        QuerySystemUserArgs criteria = args.getArgs();
+        SystemQueryUserArgs criteria = args.getArgs();
         if (!ObjectUtils.isEmpty(criteria.getDeptId())) {
             criteria.getDeptIds().add(criteria.getDeptId());
             // 先查找是否存在子节点
@@ -70,7 +70,7 @@ public class SystemUserController {
             criteria.getDeptIds().addAll(systemDeptService.queryChildDeptIdListByDeptIds(data));
         }
         // 数据权限
-        List dataScopes = systemDataService.queryDeptIdListByArgs(systemUserService.getUserByUsername(SecurityHelper.getCurrentUsername()));
+        List dataScopes = systemDataService.queryDeptIdListByArgs(systemUserService.getUserByUsername(CsSecurityHelper.getCurrentUsername()));
         // criteria.getDeptIds() 不为空并且数据权限不为空则取交集
         if (!CollectionUtils.isEmpty(criteria.getDeptIds()) && !CollectionUtils.isEmpty(dataScopes)) {
             // 取交集
@@ -109,7 +109,7 @@ public class SystemUserController {
     @ApiOperation("修改用户:个人中心")
     @PostMapping(value = "modifyUserCenterInfoById")
     public ResponseEntity modifyUserCenterInfoById(@Validated(SystemUserTb.Update.class) @RequestBody SystemUserTb resources) {
-        if (!resources.getId().equals(SecurityHelper.getCurrentUserId())) {
+        if (!resources.getId().equals(CsSecurityHelper.getCurrentUserId())) {
             throw new BadRequestException("不能修改他人资料");
         }
         systemUserService.modifyUserCenterInfoById(resources);
@@ -121,10 +121,10 @@ public class SystemUserController {
     @PreAuthorize("@el.check('user:del')")
     public ResponseEntity removeUserByIds(@RequestBody Set ids) {
         for (Long id : ids) {
-            Integer currentLevel = Collections.min(systemRoleService.queryRoleByUsersId(SecurityHelper.getCurrentUserId()).stream().map(SystemRoleTb::getLevel).collect(Collectors.toList()));
+            Integer currentLevel = Collections.min(systemRoleService.queryRoleByUsersId(CsSecurityHelper.getCurrentUserId()).stream().map(SystemRoleTb::getLevel).collect(Collectors.toList()));
             Integer optLevel = Collections.min(systemRoleService.queryRoleByUsersId(id).stream().map(SystemRoleTb::getLevel).collect(Collectors.toList()));
             if (currentLevel > optLevel) {
-                throw new BadRequestException("角色权限不足,不能删除:" + systemUserService.getUserById(id).getUsername());
+                throw new BadRequestException("角色权限不足, 不能删除:" + systemUserService.getUserById(id).getUsername());
             }
         }
         systemUserService.removeUserByIds(ids);
@@ -133,10 +133,10 @@ public class SystemUserController {
 
     @ApiOperation("修改密码")
     @PostMapping(value = "/modifyUserPasswordByUsername")
-    public ResponseEntity modifyUserPasswordByUsername(@RequestBody UpdateSystemUserPasswordArgs passVo) throws Exception {
+    public ResponseEntity modifyUserPasswordByUsername(@RequestBody SystemUpdateUserPasswordArgs passVo) throws Exception {
         String oldPass = RsaEncryptUtil.decryptByPrivateKey(properties.getRsa().getPrivateKey(), passVo.getOldPass());
         String newPass = RsaEncryptUtil.decryptByPrivateKey(properties.getRsa().getPrivateKey(), passVo.getNewPass());
-        SystemUserTb user = systemUserService.getUserByUsername(SecurityHelper.getCurrentUsername());
+        SystemUserTb user = systemUserService.getUserByUsername(CsSecurityHelper.getCurrentUsername());
         if (!passwordEncoder.matches(oldPass, user.getPassword())) {
             throw new BadRequestException("修改失败,旧密码错误");
         }
@@ -165,7 +165,7 @@ public class SystemUserController {
     @PostMapping(value = "/modifyUserEmailByUsername/{code}")
     public ResponseEntity modifyUserEmailByUsername(@PathVariable String code, @RequestBody SystemUserTb resources) throws Exception {
         String password = RsaEncryptUtil.decryptByPrivateKey(properties.getRsa().getPrivateKey(), resources.getPassword());
-        SystemUserTb user = systemUserService.getUserByUsername(SecurityHelper.getCurrentUsername());
+        SystemUserTb user = systemUserService.getUserByUsername(CsSecurityHelper.getCurrentUsername());
         if (!passwordEncoder.matches(password, user.getPassword())) {
             throw new BadRequestException("密码错误");
         }
@@ -180,7 +180,7 @@ public class SystemUserController {
      * @param resources /
      */
     private void checkLevel(SystemUserTb resources) {
-        Integer currentLevel = Collections.min(systemRoleService.queryRoleByUsersId(SecurityHelper.getCurrentUserId()).stream().map(SystemRoleTb::getLevel).collect(Collectors.toList()));
+        Integer currentLevel = Collections.min(systemRoleService.queryRoleByUsersId(CsSecurityHelper.getCurrentUserId()).stream().map(SystemRoleTb::getLevel).collect(Collectors.toList()));
         Integer optLevel = systemRoleService.getDeptLevelByRoles(resources.getRoles());
         if (currentLevel > optLevel) {
             throw new BadRequestException("角色权限不足");
@@ -190,9 +190,9 @@ public class SystemUserController {
     @ApiOperation("查询用户基础数据")
     @PostMapping(value = "/queryUserMetadataOptions")
     @PreAuthorize("@el.check('user:list')")
-    public ResponseEntity> queryUserMetadataOptions(@Validated @RequestBody CsPageArgs args) {
+    public ResponseEntity> queryUserMetadataOptions(@Validated @RequestBody CsPageArgs args) {
         int maxPageSize = 50;
-        QuerySystemUserArgs criteria = args.getArgs();
+        SystemQueryUserArgs criteria = args.getArgs();
         LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
         wrapper.and(c -> {
             c.eq(SystemUserTb::getPhone, criteria.getBlurry());
diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/dataobject/SystemOssStorageTb.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/dataobject/SystemOssStorageTb.java
new file mode 100644
index 00000000..4fe4bf7b
--- /dev/null
+++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/dataobject/SystemOssStorageTb.java
@@ -0,0 +1,65 @@
+package cn.odboy.system.dal.dataobject;
+
+import cn.odboy.base.CsBaseUserTimeTb;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 

+ * OSS存储 + *

+ * + * @author codegen + * @since 2025-07-15 + */ +@Getter +@Setter +@TableName("system_oss_storage") +@ApiModel(value = "SystemOssStorage对象", description = "OSS存储") +public class SystemOssStorageTb extends CsBaseUserTimeTb { + @ApiModelProperty("ID") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + @TableField("service_type") + @ApiModelProperty("类型,比如minio") + private String serviceType; + @TableField("endpoint") + @ApiModelProperty("服务地址") + private String endpoint; + @TableField("bucket_name") + @ApiModelProperty("存储桶名称") + private String bucketName; + @TableField("file_name") + @ApiModelProperty("完整文件名称") + private String fileName; + @TableField("file_size") + @ApiModelProperty("文件大小, 单位:字节") + private Long fileSize; + @TableField("file_mime") + @ApiModelProperty("文件类型") + private String fileMime; + @ApiModelProperty("短文件名") + @TableField("file_prefix") + private String filePrefix; + @ApiModelProperty("文件后缀") + @TableField("file_suffix") + private String fileSuffix; + @TableField("file_md5") + @ApiModelProperty("文件md5") + private String fileMd5; + @TableField("file_url") + @ApiModelProperty("文件链接") + private String fileUrl; + @TableField("file_code") + @ApiModelProperty("文件编码") + private String fileCode; + @TableField("object_name") + @ApiModelProperty("对象路径") + private String objectName; +} diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/dataobject/SystemQiniuConfigTb.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/dataobject/SystemQiniuConfigTb.java deleted file mode 100644 index aea8415a..00000000 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/dataobject/SystemQiniuConfigTb.java +++ /dev/null @@ -1,53 +0,0 @@ -package cn.odboy.system.dal.dataobject; - -import cn.odboy.base.CsObject; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import javax.validation.constraints.NotBlank; - -/** - * 七牛云对象存储配置类 - */ -@Data -@TableName("system_qiniu_config") -@EqualsAndHashCode(callSuper = false) -public class SystemQiniuConfigTb extends CsObject { - - @TableId("config_id") - private Long id; - - @NotBlank - @ApiModelProperty(value = "accessKey") - private String accessKey; - - @NotBlank - @ApiModelProperty(value = "secretKey") - private String secretKey; - - @NotBlank - @ApiModelProperty(value = "存储空间名称作为唯一的 Bucket 识别符") - private String bucket; - - /** - * Zone表示与机房的对应关系 - * 华东 Zone.zone0() - * 华北 Zone.zone1() - * 华南 Zone.zone2() - * 北美 Zone.zoneNa0() - * 东南亚 Zone.zoneAs0() - */ - @NotBlank - @ApiModelProperty(value = "Zone表示与机房的对应关系") - private String zone; - - @NotBlank - @ApiModelProperty(value = "外链域名,可自定义,需在七牛云绑定") - private String host; - - @ApiModelProperty(value = "空间类型:公开/私有") - private String type = "公开"; -} diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/dataobject/SystemQiniuContentTb.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/dataobject/SystemQiniuContentTb.java deleted file mode 100644 index d1bbe63c..00000000 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/dataobject/SystemQiniuContentTb.java +++ /dev/null @@ -1,45 +0,0 @@ -package cn.odboy.system.dal.dataobject; - -import cn.odboy.base.CsObject; -import com.baomidou.mybatisplus.annotation.*; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.util.Date; - -/** - * 上传成功后,存储结果 - */ -@Data -@TableName("system_qiniu_content") -@EqualsAndHashCode(callSuper = false) -public class SystemQiniuContentTb extends CsObject { - - @TableId(value = "id", type = IdType.AUTO) - @ApiModelProperty(value = "ID", hidden = true) - private Long id; - - @TableField("name") - @ApiModelProperty(value = "文件名") - private String key; - - @ApiModelProperty(value = "空间名") - private String bucket; - - @ApiModelProperty(value = "大小") - private String size; - - @ApiModelProperty(value = "文件地址") - private String url; - - @ApiModelProperty(value = "文件类型") - private String suffix; - - @ApiModelProperty(value = "空间类型:公开/私有") - private String type = "公开"; - - @TableField(fill = FieldFill.INSERT_UPDATE) - @ApiModelProperty(value = "创建或更新时间") - private Date updateTime; -} diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/QuerySystemQiniuArgs.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/QuerySystemQiniuArgs.java deleted file mode 100644 index 4f853d68..00000000 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/QuerySystemQiniuArgs.java +++ /dev/null @@ -1,24 +0,0 @@ -package cn.odboy.system.dal.model; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.Date; -import java.util.List; - - -@Data -public class QuerySystemQiniuArgs { - - @ApiModelProperty(value = "名称查询") - private String key; - - @ApiModelProperty(value = "创建时间") - private List createTime; - - @ApiModelProperty(value = "页码", example = "1") - private Integer page = 1; - - @ApiModelProperty(value = "每页数据量", example = "10") - private Integer size = 10; -} diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/CreateSystemDeptArgs.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemCreateDeptArgs.java similarity index 90% rename from cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/CreateSystemDeptArgs.java rename to cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemCreateDeptArgs.java index c577beee..b605a4eb 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/CreateSystemDeptArgs.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemCreateDeptArgs.java @@ -9,7 +9,7 @@ import javax.validation.constraints.NotNull; @Data @EqualsAndHashCode(callSuper = false) -public class CreateSystemDeptArgs extends CsObject { +public class SystemCreateDeptArgs extends CsObject { @NotBlank(message = "部门名称必填") private String name; @NotNull(message = "部门排序必填") diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/CreateSystemDictArgs.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemCreateDictArgs.java similarity index 85% rename from cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/CreateSystemDictArgs.java rename to cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemCreateDictArgs.java index 6bfe5b3a..8caf959f 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/CreateSystemDictArgs.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemCreateDictArgs.java @@ -8,7 +8,7 @@ import javax.validation.constraints.NotBlank; @Data @EqualsAndHashCode(callSuper = false) -public class CreateSystemDictArgs extends CsObject { +public class SystemCreateDictArgs extends CsObject { @NotBlank(message = "字典名称必填") private String name; private String description; diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/CreateSystemDictDetailArgs.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemCreateDictDetailArgs.java similarity index 91% rename from cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/CreateSystemDictDetailArgs.java rename to cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemCreateDictDetailArgs.java index 5a08a301..95240da3 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/CreateSystemDictDetailArgs.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemCreateDictDetailArgs.java @@ -10,7 +10,7 @@ import javax.validation.constraints.NotNull; @Data @EqualsAndHashCode(callSuper = false) -public class CreateSystemDictDetailArgs extends CsObject { +public class SystemCreateDictDetailArgs extends CsObject { @NotNull(message = "参数dict必填") private SystemDictTb dict; @NotBlank(message = "字典标签必填") diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/CreateSystemJobArgs.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemCreateJobArgs.java similarity index 89% rename from cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/CreateSystemJobArgs.java rename to cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemCreateJobArgs.java index 01bf068f..2d435d13 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/CreateSystemJobArgs.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemCreateJobArgs.java @@ -9,7 +9,7 @@ import javax.validation.constraints.NotNull; @Data @EqualsAndHashCode(callSuper = false) -public class CreateSystemJobArgs extends CsObject { +public class SystemCreateJobArgs extends CsObject { @NotBlank(message = "职位名称必填") private String name; @NotNull(message = "职位排序必填") diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/CreateSystemRoleArgs.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemCreateRoleArgs.java similarity index 92% rename from cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/CreateSystemRoleArgs.java rename to cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemCreateRoleArgs.java index 4dceb25f..82d9b835 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/CreateSystemRoleArgs.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemCreateRoleArgs.java @@ -11,7 +11,7 @@ import java.util.Set; @Data @EqualsAndHashCode(callSuper = false) -public class CreateSystemRoleArgs extends CsObject { +public class SystemCreateRoleArgs extends CsObject { @NotBlank(message = "角色名称必填") private String name; @NotNull(message = "角色级别必填") diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemOssStorageVo.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemOssStorageVo.java new file mode 100644 index 00000000..61ae9b76 --- /dev/null +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemOssStorageVo.java @@ -0,0 +1,11 @@ +package cn.odboy.system.dal.model; + +import cn.odboy.system.dal.dataobject.SystemOssStorageTb; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class SystemOssStorageVo extends SystemOssStorageTb { + private String fileSizeDesc; +} diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/QuerySystemDeptArgs.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemQueryDeptArgs.java similarity index 94% rename from cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/QuerySystemDeptArgs.java rename to cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemQueryDeptArgs.java index ded7190c..59544ea5 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/QuerySystemDeptArgs.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemQueryDeptArgs.java @@ -7,7 +7,7 @@ import java.util.Date; import java.util.List; @Data -public class QuerySystemDeptArgs { +public class SystemQueryDeptArgs { @ApiModelProperty(value = "部门id集合") private List ids; diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/QuerySystemDictArgs.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemQueryDictArgs.java similarity index 91% rename from cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/QuerySystemDictArgs.java rename to cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemQueryDictArgs.java index 7daa0b07..a7764f85 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/QuerySystemDictArgs.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemQueryDictArgs.java @@ -4,7 +4,7 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data -public class QuerySystemDictArgs { +public class SystemQueryDictArgs { @ApiModelProperty(value = "模糊查询") private String blurry; diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/QuerySystemDictDetailArgs.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemQueryDictDetailArgs.java similarity index 91% rename from cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/QuerySystemDictDetailArgs.java rename to cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemQueryDictDetailArgs.java index 832f489b..92b9b2cb 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/QuerySystemDictDetailArgs.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemQueryDictDetailArgs.java @@ -4,7 +4,7 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data -public class QuerySystemDictDetailArgs { +public class SystemQueryDictDetailArgs { @ApiModelProperty(value = "标签") private String label; diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/QuerySystemJobArgs.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemQueryJobArgs.java similarity index 94% rename from cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/QuerySystemJobArgs.java rename to cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemQueryJobArgs.java index 7c694626..843eacd2 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/QuerySystemJobArgs.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemQueryJobArgs.java @@ -10,7 +10,7 @@ import java.util.List; @Data @NoArgsConstructor -public class QuerySystemJobArgs { +public class SystemQueryJobArgs { @ApiModelProperty(value = "岗位名称") private String name; diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/QuerySystemMenuArgs.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemQueryMenuArgs.java similarity index 92% rename from cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/QuerySystemMenuArgs.java rename to cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemQueryMenuArgs.java index 8a3f3b17..f5aa27bf 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/QuerySystemMenuArgs.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemQueryMenuArgs.java @@ -8,7 +8,7 @@ import java.util.List; @Data -public class QuerySystemMenuArgs { +public class SystemQueryMenuArgs { @ApiModelProperty(value = "模糊查询") private String blurry; diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/QuerySystemQuartzJobArgs.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemQueryQuartzJobArgs.java similarity index 93% rename from cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/QuerySystemQuartzJobArgs.java rename to cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemQueryQuartzJobArgs.java index 4abeae58..3f2a8e80 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/QuerySystemQuartzJobArgs.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemQueryQuartzJobArgs.java @@ -8,7 +8,7 @@ import java.util.List; @Data -public class QuerySystemQuartzJobArgs { +public class SystemQueryQuartzJobArgs { @ApiModelProperty(value = "定时任务名称") private String jobName; diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/QuerySystemRoleArgs.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemQueryRoleArgs.java similarity index 94% rename from cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/QuerySystemRoleArgs.java rename to cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemQueryRoleArgs.java index 5fa4c81b..40d7ba7d 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/QuerySystemRoleArgs.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemQueryRoleArgs.java @@ -8,7 +8,7 @@ import java.util.List; @Data -public class QuerySystemRoleArgs { +public class SystemQueryRoleArgs { @ApiModelProperty(value = "模糊查询") private String blurry; diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/QuerySystemLocalStorageArgs.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemQueryStorageArgs.java similarity index 92% rename from cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/QuerySystemLocalStorageArgs.java rename to cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemQueryStorageArgs.java index b39569ef..8b4ae7ac 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/QuerySystemLocalStorageArgs.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemQueryStorageArgs.java @@ -8,7 +8,7 @@ import java.util.List; @Data -public class QuerySystemLocalStorageArgs { +public class SystemQueryStorageArgs { @ApiModelProperty(value = "模糊查询") private String blurry; diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/QuerySystemUserArgs.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemQueryUserArgs.java similarity index 95% rename from cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/QuerySystemUserArgs.java rename to cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemQueryUserArgs.java index fff987d2..4b883209 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/QuerySystemUserArgs.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemQueryUserArgs.java @@ -12,7 +12,7 @@ import java.util.Set; @Data @EqualsAndHashCode(callSuper = false) -public class QuerySystemUserArgs extends CsObject { +public class SystemQueryUserArgs extends CsObject { @ApiModelProperty(value = "ID") private Long id; diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SendSystemEmailArgs.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemSendEmailArgs.java similarity index 94% rename from cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SendSystemEmailArgs.java rename to cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemSendEmailArgs.java index 48fe472e..b8bc8ea7 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SendSystemEmailArgs.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemSendEmailArgs.java @@ -15,7 +15,7 @@ import java.util.List; @Data @AllArgsConstructor @NoArgsConstructor -public class SendSystemEmailArgs { +public class SystemSendEmailArgs { @NotEmpty @ApiModelProperty(value = "收件人") diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/UpdateSystemQuartzJobArgs.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemUpdateQuartzJobArgs.java similarity index 92% rename from cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/UpdateSystemQuartzJobArgs.java rename to cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemUpdateQuartzJobArgs.java index ab40fa1e..7e179fe3 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/UpdateSystemQuartzJobArgs.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemUpdateQuartzJobArgs.java @@ -9,7 +9,7 @@ import javax.validation.constraints.NotNull; @Data @EqualsAndHashCode(callSuper = false) -public class UpdateSystemQuartzJobArgs extends CsObject { +public class SystemUpdateQuartzJobArgs extends CsObject { @NotNull private Long id; private String uuid; diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/UpdateSystemUserPasswordArgs.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemUpdateUserPasswordArgs.java similarity index 86% rename from cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/UpdateSystemUserPasswordArgs.java rename to cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemUpdateUserPasswordArgs.java index 39613a1e..cd876ad3 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/UpdateSystemUserPasswordArgs.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemUpdateUserPasswordArgs.java @@ -7,7 +7,7 @@ import lombok.Data; * 修改密码 */ @Data -public class UpdateSystemUserPasswordArgs { +public class SystemUpdateUserPasswordArgs { @ApiModelProperty(value = "旧密码") private String oldPass; diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemDeptMapper.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemDeptMapper.java index 63b63817..09ac07a8 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemDeptMapper.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemDeptMapper.java @@ -1,7 +1,7 @@ package cn.odboy.system.dal.mysql; import cn.odboy.system.dal.dataobject.SystemDeptTb; -import cn.odboy.system.dal.model.QuerySystemDeptArgs; +import cn.odboy.system.dal.model.SystemQueryDeptArgs; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -15,7 +15,7 @@ import java.util.List; */ @Mapper public interface SystemDeptMapper extends BaseMapper { - List selectDeptByArgs(@Param("criteria") QuerySystemDeptArgs criteria); + List selectDeptByArgs(@Param("criteria") SystemQueryDeptArgs criteria); List selectDeptByPid(@Param("pid") Long pid); diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemDictDetailMapper.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemDictDetailMapper.java index 7465283a..28bf312d 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemDictDetailMapper.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemDictDetailMapper.java @@ -1,7 +1,7 @@ package cn.odboy.system.dal.mysql; import cn.odboy.system.dal.dataobject.SystemDictDetailTb; -import cn.odboy.system.dal.model.QuerySystemDictDetailArgs; +import cn.odboy.system.dal.model.SystemQueryDictDetailArgs; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -19,9 +19,9 @@ import java.util.Set; */ @Mapper public interface SystemDictDetailMapper extends BaseMapper { - IPage selectDictDetailByArgs(@Param("criteria") QuerySystemDictDetailArgs criteria, Page page); + IPage selectDictDetailByArgs(@Param("criteria") SystemQueryDictDetailArgs criteria, Page page); - List selectDictDetailByArgs(@Param("criteria") QuerySystemDictDetailArgs criteria); + List selectDictDetailByArgs(@Param("criteria") SystemQueryDictDetailArgs criteria); void deleteDictDetailByDictIds(@Param("dictIds") Set dictIds); } diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemDictMapper.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemDictMapper.java index f20821aa..11f5d27d 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemDictMapper.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemDictMapper.java @@ -1,7 +1,7 @@ package cn.odboy.system.dal.mysql; import cn.odboy.system.dal.dataobject.SystemDictTb; -import cn.odboy.system.dal.model.QuerySystemDictArgs; +import cn.odboy.system.dal.model.SystemQueryDictArgs; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -18,7 +18,7 @@ import java.util.List; */ @Mapper public interface SystemDictMapper extends BaseMapper { - IPage selectDictByArgs(@Param("criteria") QuerySystemDictArgs criteria, Page page); + IPage selectDictByArgs(@Param("criteria") SystemQueryDictArgs criteria, Page page); - List selectDictByArgs(@Param("criteria") QuerySystemDictArgs criteria); + List selectDictByArgs(@Param("criteria") SystemQueryDictArgs criteria); } diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemJobMapper.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemJobMapper.java index 4900f4b1..4988adc5 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemJobMapper.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemJobMapper.java @@ -1,7 +1,7 @@ package cn.odboy.system.dal.mysql; import cn.odboy.system.dal.dataobject.SystemJobTb; -import cn.odboy.system.dal.model.QuerySystemJobArgs; +import cn.odboy.system.dal.model.SystemQueryJobArgs; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -17,5 +17,5 @@ import org.apache.ibatis.annotations.Param; public interface SystemJobMapper extends BaseMapper { SystemJobTb getJobByName(@Param("name") String name); - IPage selectJobByArgs(@Param("criteria") QuerySystemJobArgs criteria, Page page); + IPage selectJobByArgs(@Param("criteria") SystemQueryJobArgs criteria, Page page); } diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemLocalStorageMapper.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemLocalStorageMapper.java index 364fdad9..3ed5a7eb 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemLocalStorageMapper.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemLocalStorageMapper.java @@ -1,7 +1,7 @@ package cn.odboy.system.dal.mysql; import cn.odboy.system.dal.dataobject.SystemLocalStorageTb; -import cn.odboy.system.dal.model.QuerySystemLocalStorageArgs; +import cn.odboy.system.dal.model.SystemQueryStorageArgs; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -15,5 +15,5 @@ import org.apache.ibatis.annotations.Param; */ @Mapper public interface SystemLocalStorageMapper extends BaseMapper { - IPage selectLocalStorageByArgs(@Param("criteria") QuerySystemLocalStorageArgs criteria, Page page); + IPage selectLocalStorageByArgs(@Param("criteria") SystemQueryStorageArgs criteria, Page page); } diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemMenuMapper.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemMenuMapper.java index ba14daa0..5ab3834a 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemMenuMapper.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemMenuMapper.java @@ -1,7 +1,7 @@ package cn.odboy.system.dal.mysql; import cn.odboy.system.dal.dataobject.SystemMenuTb; -import cn.odboy.system.dal.model.QuerySystemMenuArgs; +import cn.odboy.system.dal.model.SystemQueryMenuArgs; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -19,7 +19,7 @@ import java.util.Set; @Mapper public interface SystemMenuMapper extends BaseMapper { - List selectMenuByArgs(@Param("criteria") QuerySystemMenuArgs criteria); + List selectMenuByArgs(@Param("criteria") SystemQueryMenuArgs criteria); LinkedHashSet selectMenuByRoleIdsAndType(@Param("roleIds") Set roleIds, @Param("type") Integer type); diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemOssStorageMapper.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemOssStorageMapper.java new file mode 100644 index 00000000..e8d059af --- /dev/null +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemOssStorageMapper.java @@ -0,0 +1,24 @@ +package cn.odboy.system.dal.mysql; + +import cn.odboy.system.dal.dataobject.SystemOssStorageTb; +import cn.odboy.system.dal.model.SystemQueryStorageArgs; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +/** + *

+ * OSS存储 Mapper 接口 + *

+ * + * @author codegen + * @since 2025-07-15 + */ +@Mapper +public interface SystemOssStorageMapper extends BaseMapper { + IPage selectOssStorageByArgs(SystemQueryStorageArgs criteria, Page page); + List selectOssStorageByArgs(SystemQueryStorageArgs criteria); +} diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemQiniuConfigMapper.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemQiniuConfigMapper.java deleted file mode 100644 index a1abc85b..00000000 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemQiniuConfigMapper.java +++ /dev/null @@ -1,15 +0,0 @@ -package cn.odboy.system.dal.mysql; - -import cn.odboy.system.dal.dataobject.SystemQiniuConfigTb; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Mapper; - - -/** - * 七牛云配置表 Mapper - * - * @author odboy - */ -@Mapper -public interface SystemQiniuConfigMapper extends BaseMapper { -} diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemQiniuContentMapper.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemQiniuContentMapper.java deleted file mode 100644 index ab3fd3ad..00000000 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemQiniuContentMapper.java +++ /dev/null @@ -1,21 +0,0 @@ -package cn.odboy.system.dal.mysql; - -import cn.odboy.system.dal.dataobject.SystemQiniuContentTb; -import cn.odboy.system.dal.model.QuerySystemQiniuArgs; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; - -/** - * 七牛云存储记录 Mapper - * - * @author odboy - */ -@Mapper -public interface SystemQiniuContentMapper extends BaseMapper { - SystemQiniuContentTb getQiniuContentByName(@Param("name") String name); - - IPage selectQiniuContentByArgs(@Param("criteria") QuerySystemQiniuArgs criteria, Page page); -} diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemQuartzJobMapper.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemQuartzJobMapper.java index a3365cb0..f1b56ac2 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemQuartzJobMapper.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemQuartzJobMapper.java @@ -1,7 +1,7 @@ package cn.odboy.system.dal.mysql; import cn.odboy.system.dal.dataobject.SystemQuartzJobTb; -import cn.odboy.system.dal.model.QuerySystemQuartzJobArgs; +import cn.odboy.system.dal.model.SystemQueryQuartzJobArgs; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -17,7 +17,7 @@ import java.util.List; */ @Mapper public interface SystemQuartzJobMapper extends BaseMapper { - IPage selectQuartzJobByArgs(@Param("criteria") QuerySystemQuartzJobArgs criteria, Page page); + IPage selectQuartzJobByArgs(@Param("criteria") SystemQueryQuartzJobArgs criteria, Page page); List selectAllEnableQuartzJob(); } diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemQuartzLogMapper.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemQuartzLogMapper.java index 144b4e5d..306a3b2b 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemQuartzLogMapper.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemQuartzLogMapper.java @@ -1,7 +1,7 @@ package cn.odboy.system.dal.mysql; import cn.odboy.system.dal.dataobject.SystemQuartzLogTb; -import cn.odboy.system.dal.model.QuerySystemQuartzJobArgs; +import cn.odboy.system.dal.model.SystemQueryQuartzJobArgs; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -16,5 +16,5 @@ import org.apache.ibatis.annotations.Param; */ @Mapper public interface SystemQuartzLogMapper extends BaseMapper { - IPage selectQuartzLogByArgs(@Param("criteria") QuerySystemQuartzJobArgs criteria, Page page); + IPage selectQuartzLogByArgs(@Param("criteria") SystemQueryQuartzJobArgs criteria, Page page); } diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemRoleMapper.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemRoleMapper.java index 2ebca19c..a173c3f5 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemRoleMapper.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemRoleMapper.java @@ -1,7 +1,7 @@ package cn.odboy.system.dal.mysql; import cn.odboy.system.dal.dataobject.SystemRoleTb; -import cn.odboy.system.dal.model.QuerySystemRoleArgs; +import cn.odboy.system.dal.model.SystemQueryRoleArgs; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -18,9 +18,9 @@ import java.util.Set; public interface SystemRoleMapper extends BaseMapper { List selectAllRole(); - List selectRoleByArgs(@Param("criteria") QuerySystemRoleArgs criteria); + List selectRoleByArgs(@Param("criteria") SystemQueryRoleArgs criteria); - Long countRoleByArgs(@Param("criteria") QuerySystemRoleArgs criteria); + Long countRoleByArgs(@Param("criteria") SystemQueryRoleArgs criteria); SystemRoleTb getRoleByName(@Param("name") String name); diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemUserMapper.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemUserMapper.java index bfda0056..58b82b91 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemUserMapper.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemUserMapper.java @@ -1,7 +1,7 @@ package cn.odboy.system.dal.mysql; import cn.odboy.system.dal.dataobject.SystemUserTb; -import cn.odboy.system.dal.model.QuerySystemUserArgs; +import cn.odboy.system.dal.model.SystemQueryUserArgs; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,7 +13,7 @@ import java.util.Set; @Mapper public interface SystemUserMapper extends BaseMapper { - IPage selectUserByArgs(@Param("criteria") QuerySystemUserArgs criteria, Page page); + IPage selectUserByArgs(@Param("criteria") SystemQueryUserArgs criteria, Page page); SystemUserTb getUserByUsername(@Param("username") String username); @@ -33,7 +33,7 @@ public interface SystemUserMapper extends BaseMapper { Long countUserByRoleIds(@Param("roleIds") Set roleIds); - Long countUserByArgs(@Param("criteria") QuerySystemUserArgs criteria); + Long countUserByArgs(@Param("criteria") SystemQueryUserArgs criteria); void updateUserPasswordByUsername(@Param("username") String username, @Param("password") String password); diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/redis/SystemUserInfoDAO.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/redis/SystemUserInfoDAO.java index 60002139..5d2adbe6 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/redis/SystemUserInfoDAO.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/redis/SystemUserInfoDAO.java @@ -1,8 +1,8 @@ package cn.odboy.system.dal.redis; import cn.hutool.core.util.RandomUtil; -import cn.odboy.system.dal.model.SystemUserJwtVo; import cn.odboy.framework.redis.RedisHelper; +import cn.odboy.system.dal.model.SystemUserJwtVo; import cn.odboy.util.StringUtil; import lombok.RequiredArgsConstructor; import org.springframework.scheduling.annotation.Async; diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/redis/SystemUserOnlineInfoDAO.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/redis/SystemUserOnlineInfoDAO.java index 79cfd7bd..6407109f 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/redis/SystemUserOnlineInfoDAO.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/redis/SystemUserOnlineInfoDAO.java @@ -1,11 +1,11 @@ package cn.odboy.system.dal.redis; import cn.odboy.base.CsResultVo; +import cn.odboy.framework.properties.AppProperties; +import cn.odboy.framework.redis.RedisHelper; import cn.odboy.system.dal.model.SystemUserJwtVo; import cn.odboy.system.dal.model.SystemUserOnlineVo; import cn.odboy.system.framework.permission.core.handler.TokenProvider; -import cn.odboy.framework.properties.AppProperties; -import cn.odboy.framework.redis.RedisHelper; import cn.odboy.util.*; import com.baomidou.mybatisplus.core.metadata.IPage; import lombok.AllArgsConstructor; diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/mybatisplus/MpMetaObjectHandler.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/mybatisplus/MpMetaObjectHandler.java index 217e3244..d5ab4532 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/mybatisplus/MpMetaObjectHandler.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/mybatisplus/MpMetaObjectHandler.java @@ -1,7 +1,7 @@ package cn.odboy.system.framework.mybatisplus; import cn.hutool.core.date.DateTime; -import cn.odboy.system.framework.permission.core.SecurityHelper; +import cn.odboy.system.framework.permission.core.CsSecurityHelper; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import org.apache.ibatis.reflection.MetaObject; import org.springframework.stereotype.Component; @@ -20,7 +20,7 @@ public class MpMetaObjectHandler implements MetaObjectHandler { /* 操作人 */ String username = "System"; try { - username = SecurityHelper.getCurrentUsername(); + username = CsSecurityHelper.getCurrentUsername(); } catch (Exception ignored) { } this.strictInsertFill(metaObject, "createBy", String.class, username); @@ -34,7 +34,7 @@ public class MpMetaObjectHandler implements MetaObjectHandler { /* 操作人 */ String username = "System"; try { - username = SecurityHelper.getCurrentUsername(); + username = CsSecurityHelper.getCurrentUsername(); } catch (Exception ignored) { } this.strictUpdateFill(metaObject, "updateBy", String.class, username); diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/config/AuthorityConfig.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/config/AuthorityConfig.java index 52172a51..a5e21722 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/config/AuthorityConfig.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/config/AuthorityConfig.java @@ -1,6 +1,6 @@ package cn.odboy.system.framework.permission.config; -import cn.odboy.system.framework.permission.core.SecurityHelper; +import cn.odboy.system.framework.permission.core.CsSecurityHelper; import org.springframework.security.core.GrantedAuthority; import org.springframework.stereotype.Service; @@ -19,7 +19,7 @@ public class AuthorityConfig { */ public Boolean check(String... permissions) { // 获取当前用户的所有权限 - List roleList = SecurityHelper.getCurrentUser().getAuthorities().stream().map(GrantedAuthority::getAuthority).collect(Collectors.toList()); + List roleList = CsSecurityHelper.getCurrentUser().getAuthorities().stream().map(GrantedAuthority::getAuthority).collect(Collectors.toList()); // 判断当前用户的所有权限是否包含接口上定义的权限 return roleList.contains("admin") || Arrays.stream(permissions).anyMatch(roleList::contains); } diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/SecurityHelper.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/CsSecurityHelper.java similarity index 99% rename from cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/SecurityHelper.java rename to cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/CsSecurityHelper.java index 735335e2..c63e05b6 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/SecurityHelper.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/CsSecurityHelper.java @@ -25,7 +25,7 @@ import java.util.Objects; */ @Slf4j @Component -public class SecurityHelper { +public class CsSecurityHelper { /** * 获取当前登录的用户 * diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/TokenProvider.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/TokenProvider.java index 6024d70b..58cce33d 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/TokenProvider.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/TokenProvider.java @@ -4,10 +4,10 @@ import cn.hutool.core.date.DateField; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; import cn.odboy.constant.SystemConst; -import cn.odboy.system.dal.model.SystemUserJwtVo; -import cn.odboy.system.dal.redis.SystemRedisKey; import cn.odboy.framework.properties.AppProperties; import cn.odboy.framework.redis.RedisHelper; +import cn.odboy.system.dal.model.SystemUserJwtVo; +import cn.odboy.system.dal.redis.SystemRedisKey; import io.jsonwebtoken.Claims; import io.jsonwebtoken.JwtParser; import io.jsonwebtoken.Jwts; diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/UserDetailsHandler.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/UserDetailsHandler.java index 972465dd..1e6faa88 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/UserDetailsHandler.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/UserDetailsHandler.java @@ -1,5 +1,6 @@ package cn.odboy.system.framework.permission.core.handler; +import cn.odboy.framework.exception.BadRequestException; import cn.odboy.system.dal.dataobject.SystemUserTb; import cn.odboy.system.dal.model.SystemRoleCodeVo; import cn.odboy.system.dal.model.SystemUserJwtVo; @@ -7,7 +8,6 @@ import cn.odboy.system.dal.redis.SystemUserInfoDAO; import cn.odboy.system.service.SystemDataService; import cn.odboy.system.service.SystemRoleService; import cn.odboy.system.service.SystemUserService; -import cn.odboy.framework.exception.BadRequestException; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.security.core.userdetails.UserDetailsService; diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/quartz/ExecutionJobBean.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/quartz/ExecutionJobBean.java index 2cdbb5ea..4ce55323 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/quartz/ExecutionJobBean.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/quartz/ExecutionJobBean.java @@ -6,14 +6,14 @@ import cn.hutool.extra.template.TemplateConfig; import cn.hutool.extra.template.TemplateEngine; import cn.hutool.extra.template.TemplateUtil; import cn.odboy.framework.context.SpringBeanHolder; +import cn.odboy.framework.quartz.core.QuartzRunnable; +import cn.odboy.framework.redis.RedisHelper; import cn.odboy.system.dal.dataobject.SystemQuartzJobTb; import cn.odboy.system.dal.dataobject.SystemQuartzLogTb; -import cn.odboy.system.dal.model.SendSystemEmailArgs; +import cn.odboy.system.dal.model.SystemSendEmailArgs; import cn.odboy.system.dal.mysql.SystemQuartzLogMapper; import cn.odboy.system.service.SystemEmailService; import cn.odboy.system.service.SystemQuartzJobService; -import cn.odboy.framework.quartz.core.QuartzRunnable; -import cn.odboy.framework.redis.RedisHelper; import cn.odboy.util.StringUtil; import lombok.extern.slf4j.Slf4j; import org.quartz.JobExecutionContext; @@ -91,7 +91,7 @@ public class ExecutionJobBean extends QuartzJobBean { SystemEmailService emailService = SpringBeanHolder.getBean(SystemEmailService.class); // 邮箱报警 if (StringUtil.isNoneBlank(quartzJob.getEmail())) { - SendSystemEmailArgs sendEmailRequest = taskAlarm(quartzJob, ExceptionUtil.stacktraceToString(e)); + SystemSendEmailArgs sendEmailRequest = taskAlarm(quartzJob, ExceptionUtil.stacktraceToString(e)); emailService.sendEmail(sendEmailRequest); } } @@ -100,8 +100,8 @@ public class ExecutionJobBean extends QuartzJobBean { } } - private SendSystemEmailArgs taskAlarm(SystemQuartzJobTb quartzJob, String msg) { - SendSystemEmailArgs sendEmailRequest = new SendSystemEmailArgs(); + private SystemSendEmailArgs taskAlarm(SystemQuartzJobTb quartzJob, String msg) { + SystemSendEmailArgs sendEmailRequest = new SystemSendEmailArgs(); sendEmailRequest.setSubject("定时任务【" + quartzJob.getJobName() + "】执行失败,请尽快处理!"); Map data = new HashMap<>(16); data.put("task", quartzJob); diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/quartz/QuartzManage.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/quartz/QuartzManage.java index 0d20e90c..1a19bfc8 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/quartz/QuartzManage.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/quartz/QuartzManage.java @@ -1,7 +1,7 @@ package cn.odboy.system.framework.quartz; -import cn.odboy.system.dal.dataobject.SystemQuartzJobTb; import cn.odboy.framework.exception.BadRequestException; +import cn.odboy.system.dal.dataobject.SystemQuartzJobTb; import lombok.extern.slf4j.Slf4j; import org.quartz.*; import org.quartz.impl.triggers.CronTriggerImpl; diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/storage/OssStorageConfiguration.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/storage/OssStorageConfiguration.java new file mode 100644 index 00000000..a2938b26 --- /dev/null +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/storage/OssStorageConfiguration.java @@ -0,0 +1,28 @@ +package cn.odboy.system.framework.storage; + +import cn.odboy.framework.exception.BadRequestException; +import cn.odboy.framework.properties.AppProperties; +import cn.odboy.framework.properties.model.OSSConfigModel; +import io.minio.MinioClient; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Slf4j +@Configuration +public class OssStorageConfiguration { + @Autowired + private AppProperties properties; + + @Bean + public MinioClient minioClient() { + try { + OSSConfigModel minio = properties.getOss().getMinio(); + return MinioClient.builder().endpoint(minio.getEndpoint()).credentials(minio.getAccessKey(), minio.getSecretKey()).build(); + } catch (Exception e) { + log.error("创建Minio客户端失败", e); + throw new BadRequestException("创建Minio客户端失败"); + } + } +} diff --git a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/server/config/MultipartConfig.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/storage/local/MultipartConfig.java similarity index 73% rename from cutejava/cutejava-framework/src/main/java/cn/odboy/framework/server/config/MultipartConfig.java rename to cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/storage/local/MultipartConfig.java index 17f73409..4e054dae 100644 --- a/cutejava/cutejava-framework/src/main/java/cn/odboy/framework/server/config/MultipartConfig.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/storage/local/MultipartConfig.java @@ -1,5 +1,7 @@ -package cn.odboy.framework.server.config; +package cn.odboy.system.framework.storage.local; +import cn.odboy.framework.exception.BadRequestException; +import cn.odboy.framework.properties.AppProperties; import cn.odboy.framework.server.core.FileUploadPathHelper; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -20,6 +22,8 @@ public class MultipartConfig { private String name; @Autowired private FileUploadPathHelper fileUploadPathHelper; + @Autowired + private AppProperties properties; /** * 文件上传临时路径 @@ -27,13 +31,14 @@ public class MultipartConfig { @Bean public MultipartConfigElement multipartConfigElement() { MultipartConfigFactory factory = new MultipartConfigFactory(); - factory.setMaxFileSize(DataSize.ofMegabytes(fileUploadPathHelper.getFileMaxSize())); - factory.setMaxRequestSize(DataSize.ofMegabytes(fileUploadPathHelper.getAvatarMaxSize())); + factory.setMaxFileSize(DataSize.ofMegabytes(properties.getOss().getMaxSize())); + factory.setMaxRequestSize(DataSize.ofMegabytes(properties.getOss().getMaxSize())); String location = System.getProperty("user.home") + "/" + name + "/tmp"; File tmpFile = new File(location); if (!tmpFile.exists()) { if (!tmpFile.mkdirs()) { log.error("创建临时文件失败"); + throw new BadRequestException("创建临时文件失败"); } } factory.setLocation(location); diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/storage/minio/MinioRepository.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/storage/minio/MinioRepository.java new file mode 100644 index 00000000..90b14486 --- /dev/null +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/storage/minio/MinioRepository.java @@ -0,0 +1,392 @@ +package cn.odboy.system.framework.storage.minio; + + +import cn.hutool.core.io.FastByteArrayOutputStream; +import cn.hutool.core.io.FileTypeUtil; +import cn.hutool.core.io.IORuntimeException; +import cn.hutool.core.lang.UUID; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.StrUtil; +import cn.odboy.framework.exception.BadRequestException; +import cn.odboy.framework.properties.AppProperties; +import cn.odboy.framework.properties.model.OSSConfigModel; +import cn.odboy.framework.properties.model.StorageOSSModel; +import cn.odboy.framework.server.core.FileUploadPathHelper; +import cn.odboy.system.dal.dataobject.SystemOssStorageTb; +import cn.odboy.util.CsDateUtil; +import cn.odboy.util.FileUtil; +import io.minio.*; +import io.minio.http.Method; +import io.minio.messages.Bucket; +import io.minio.messages.Item; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class MinioRepository { + private final AppProperties properties; + private final MinioClient minioClient; + private final FileUploadPathHelper fileUploadPathHelper; + + /** + * 检查存储bucket是否存在 + * + * @param bucketName Bucket 名称 + * @return boolean 存在返回 true,否则返回 false + */ + public boolean bucketExists(String bucketName) { + try { + return minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build()); + } catch (Exception e) { + log.error("检查 bucket 是否存在失败,bucketName: {}, 错误信息", bucketName, e); + return false; + } + } + + /** + * 创建存储bucket + * + * @param bucketName Bucket 名称 + * @return boolean 创建成功返回 true,否则返回 false + */ + public boolean makeBucket(String bucketName) { + try { + if (!bucketExists(bucketName)) { + minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build()); + log.info("Bucket 创建成功,bucketName: {}", bucketName); + return true; + } else { + log.warn("Bucket 已经存在,bucketName: {}", bucketName); + } + } catch (Exception e) { + log.error("创建 bucket 失败,bucketName: {}, 错误信息", bucketName, e); + } + return false; + } + + /** + * 删除存储bucket + * + * @param bucketName Bucket 名称 + * @return boolean 删除成功返回 true,否则返回 false + */ + public boolean removeBucket(String bucketName) { + try { + if (bucketExists(bucketName)) { + minioClient.removeBucket(RemoveBucketArgs.builder().bucket(bucketName).build()); + log.info("Bucket 删除成功,bucketName: {}", bucketName); + return true; + } else { + log.warn("Bucket 不存在,bucketName: {}", bucketName); + } + } catch (Exception e) { + log.error("删除 bucket 失败,bucketName: {}, 错误信息", bucketName, e); + } + return false; + } + + /** + * 获取所有 bucket 列表 + * + * @return List 所有的 Bucket 列表 + */ + public List queryAllBuckets() { + try { + return minioClient.listBuckets(); + } catch (Exception e) { + log.error("获取所有 buckets 失败,错误信息", e); + } + return Collections.emptyList(); + } + + /** + * 文件上传 + * + * @param file 文件 + * @return String 上传后的文件名,上传失败返回 null + */ + public SystemOssStorageTb upload(MultipartFile file) { + String originalFilename = file.getOriginalFilename(); + if (StrUtil.isBlank(originalFilename)) { + throw new BadRequestException("文件名不能为空"); + } + + StorageOSSModel ossConfig = properties.getOss(); + OSSConfigModel ossMinioConfig = ossConfig.getMinio(); + long fileSize = file.getSize(); + FileUtil.checkSize(ossConfig.getMaxSize(), fileSize); + String contentType = file.getContentType(); + + // 按天分组 + String nowDateStr = CsDateUtil.getNowDateStr(); + File tempFile = FileUtil.upload(file, fileUploadPathHelper.getPath() + nowDateStr + File.separator); + if (tempFile == null) { + throw new BadRequestException("上传失败"); + } + + String fileCode = IdUtil.fastSimpleUUID(); + String fileName = fileCode + getFileExtension(originalFilename); + String objectName = CsDateUtil.getNowDateStr() + "/" + fileName; + log.info("上传文件,原文件名:{},上传后文件名:{}", originalFilename, fileName); + String fileUrl = ossMinioConfig.getEndpoint() + "/" + ossMinioConfig.getBucketName() + "/" + objectName; + + SystemOssStorageTb systemOssStorageTb = new SystemOssStorageTb(); + systemOssStorageTb.setServiceType("minio"); + systemOssStorageTb.setEndpoint(ossMinioConfig.getEndpoint()); + systemOssStorageTb.setBucketName(StrUtil.trim(ossMinioConfig.getBucketName())); + systemOssStorageTb.setFileName(originalFilename); + systemOssStorageTb.setFileSize(fileSize); + systemOssStorageTb.setFileMime(FileTypeUtil.getType(tempFile)); + systemOssStorageTb.setFilePrefix(FileUtil.getPrefix(tempFile)); + systemOssStorageTb.setFileSuffix(FileUtil.getSuffix(tempFile)); + systemOssStorageTb.setFileMd5(FileUtil.getMd5(tempFile)); + systemOssStorageTb.setFileUrl(fileUrl); + systemOssStorageTb.setFileCode(fileCode); + systemOssStorageTb.setObjectName(objectName); + + try (InputStream fileInputStream = FileUtil.getInputStream(tempFile)) { + PutObjectArgs objectArgs = PutObjectArgs.builder() + .bucket(ossMinioConfig.getBucketName()) + .object(objectName) + .stream(fileInputStream, fileSize, -1) + .contentType(contentType) + .build(); + minioClient.putObject(objectArgs); + log.info("文件上传成功,并删除临时文件,文件名:{}", originalFilename); + return systemOssStorageTb; + } catch (Exception e) { + log.error("文件上传失败,文件名:{},错误信息", originalFilename, e); + } finally { + try { + FileUtil.del(tempFile); + } catch (IORuntimeException e) { + // 删除失败忽略 + } + } + return null; + } + + + /** + * 优化文件上传 + * 文件上传:优化版 + * + * @param file + * @return {@link String } + */ + public String optimizedFileUpload(MultipartFile file) { + String originalFilename = file.getOriginalFilename(); + if (StrUtil.isBlank(originalFilename)) { + throw new BadRequestException("文件名不能为空"); + } + + if (file.getSize() > properties.getOss().getMaxSize()) { + throw new BadRequestException("文件大小超出限制,最大允许上传 100 MB"); + } + + String fileName = UUID.randomUUID() + getFileExtension(originalFilename); + // yyyy/MM/dd/fileName.xxx + String objectName = CsDateUtil.getNowDateTimeStr() + "/" + fileName; + + log.info("准备上传文件,原文件名:{},上传后文件名:{}", originalFilename, fileName); + try (InputStream fileInputStream = file.getInputStream()) { + PutObjectArgs objectArgs = PutObjectArgs.builder().bucket(properties.getOss().getMinio().getBucketName()).object(objectName).stream(fileInputStream, file.getSize(), -1).contentType(file.getContentType()).build(); + // 使用重试机制进行上传 + uploadWithRetry(objectArgs, 3); + log.info("文件上传成功,objectName: {}", objectName); + return objectName; + } catch (Exception e) { + log.error("文件上传失败,文件名:{},错误信息", originalFilename, e); + } + return null; + } + + /** + * 上传重试机制 + * + * @param objectArgs 对象参数 + * @param maxRetries 最大重试次数 + * @throws Exception 例外 + */ + private void uploadWithRetry(PutObjectArgs objectArgs, int maxRetries) throws Exception { + int attempt = 0; + while (attempt < maxRetries) { + try { + minioClient.putObject(objectArgs); + return; // 上传成功,返回 + } catch (Exception e) { + attempt++; + log.warn("上传失败,第 {} 次尝试,错误信息", attempt, e); + if (attempt == maxRetries) { + throw new RuntimeException("上传失败,已达到最大重试次数"); + } + // 等待一段时间后重试 + Thread.sleep(2000); + } + } + } + + /** + * 获取文件扩展名 + * + * @param fileName 文件名 + * @return String 文件扩展名 + */ + private String getFileExtension(String fileName) { + int lastIndex = fileName.lastIndexOf("."); + return lastIndex == -1 ? "" : fileName.substring(lastIndex); + } + + /** + * 验证文件大小 + * 限制上传的文件大小 + * + * @param file 文件 + * @return boolean + */ + public boolean validateFileSize(MultipartFile file) { + if (file.getSize() > properties.getOss().getMaxSize()) { + log.warn("文件超出大小限制,最大允许上传 100 MB,当前文件大小: {}", file.getSize()); + return false; + } + return true; + } + + /** + * 生成文件的预签名 URL,用于文件预览 + * + * @param fullFileName 文件完整路径 + * @return String 预签名 URL + */ + public String generatePreviewUrl(String fullFileName) { + if (StrUtil.isBlank(fullFileName)) { + log.warn("文件名为空,无法生成预签名 URL"); + return null; + } + try { + GetPresignedObjectUrlArgs presignedUrlArgs = GetPresignedObjectUrlArgs.builder().bucket(properties.getOss().getMinio().getBucketName()).object(fullFileName).method(Method.GET) + // 设置 URL 过期时间为 1 小时 + .expiry(3600).build(); + String url = minioClient.getPresignedObjectUrl(presignedUrlArgs); + log.info("生成预签名 URL 成功,fileName: {}, url: {}", fullFileName, url); + return url; + } catch (Exception e) { + log.error("生成预签名 URL 失败,fileName: {}", fullFileName, e); + } + return null; + } + + + /** + * 下载文件 + * + * @param fileName 文件名称 + * @param res HTTP 响应 + */ + public void download(String fileName, HttpServletResponse res) { + GetObjectArgs objectArgs = GetObjectArgs.builder().bucket(properties.getOss().getMinio().getBucketName()).object(fileName).build(); + + try (GetObjectResponse response = minioClient.getObject(objectArgs); FastByteArrayOutputStream os = new FastByteArrayOutputStream()) { + + byte[] buf = new byte[1024]; + int len; + while ((len = response.read(buf)) != -1) { + os.write(buf, 0, len); + } + os.flush(); + + byte[] bytes = os.toByteArray(); + res.setCharacterEncoding("utf-8"); + res.addHeader("Content-Disposition", "attachment;fileName=" + fileName); + try (ServletOutputStream stream = res.getOutputStream()) { + stream.write(bytes); + stream.flush(); + } + } catch (Exception e) { + log.error("下载文件失败,fileName: {}, 错误信息", fileName, e); + } + } + + /** + * 文件下载:优化版 + * + * @param fileName 文件名称 + * @param res HTTP 响应 + */ + public void downloadOptimizedVersion(String fileName, HttpServletResponse res) { + GetObjectArgs objectArgs = GetObjectArgs.builder().bucket(properties.getOss().getMinio().getBucketName()).object(fileName).build(); + + try (GetObjectResponse response = minioClient.getObject(objectArgs)) { + // 增大缓冲区 + byte[] buf = new byte[1024 * 4]; + int len; + + // 分块下载并输出到响应流 + try (ServletOutputStream stream = res.getOutputStream()) { + res.setCharacterEncoding("utf-8"); + res.addHeader("Content-Disposition", "attachment;fileName=" + fileName); + res.setHeader("Cache-Control", "no-store"); + res.setHeader("Pragma", "no-cache"); + res.setHeader("Expires", "0"); + + while ((len = response.read(buf)) != -1) { + stream.write(buf, 0, len); + // 确保实时写入 + stream.flush(); + } + log.info("文件下载成功,fileName: {}", fileName); + } + } catch (Exception e) { + log.error("下载文件失败,fileName: {}, 错误信息", fileName, e); + } + } + + + /** + * 查看文件对象列表 + * + * @return List 文件对象列表 + */ + public List listObjects() { + try { + Iterable> results = minioClient.listObjects(ListObjectsArgs.builder().bucket(properties.getOss().getMinio().getBucketName()).build()); + List items = new ArrayList<>(); + for (Result result : results) { + items.add(result.get()); + } + return items; + } catch (Exception e) { + log.error("列出文件对象失败,错误信息", e); + } + return Collections.emptyList(); + } + + /** + * 删除文件 + * + * @param fileName 文件名 + * @return boolean 删除成功返回 true,否则返回 false + */ + public boolean remove(String fileName) { + try { + minioClient.removeObject(RemoveObjectArgs.builder().bucket(properties.getOss().getMinio().getBucketName()).object(fileName).build()); + log.info("删除文件成功,fileName: {}", fileName); + return true; + } catch (Exception e) { + log.error("删除文件失败,fileName: {}, 错误信息", fileName, e); + } + return false; + } +} diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/job/TestTask.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/job/TestTask.java index 9b557170..c70f56c0 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/job/TestTask.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/job/TestTask.java @@ -12,7 +12,7 @@ public class TestTask { } public void run1(String str) { - log.info("run1 执行成功,参数为: {}", str); + log.info("run1 执行成功, 参数为: {}", str); } public void run2() { diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemDeptService.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemDeptService.java index 48c2cb7c..fa43b351 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemDeptService.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemDeptService.java @@ -5,15 +5,15 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; import cn.odboy.base.CsResultVo; +import cn.odboy.framework.exception.BadRequestException; import cn.odboy.system.constant.SystemDataScopeEnum; import cn.odboy.system.dal.dataobject.SystemDeptTb; -import cn.odboy.system.dal.model.CreateSystemDeptArgs; -import cn.odboy.system.dal.model.QuerySystemDeptArgs; +import cn.odboy.system.dal.model.SystemCreateDeptArgs; +import cn.odboy.system.dal.model.SystemQueryDeptArgs; import cn.odboy.system.dal.mysql.SystemDeptMapper; import cn.odboy.system.dal.mysql.SystemRoleMapper; import cn.odboy.system.dal.mysql.SystemUserMapper; -import cn.odboy.system.framework.permission.core.SecurityHelper; -import cn.odboy.framework.exception.BadRequestException; +import cn.odboy.system.framework.permission.core.CsSecurityHelper; import cn.odboy.util.ClassUtil; import cn.odboy.util.FileUtil; import cn.odboy.util.StringUtil; @@ -43,7 +43,7 @@ public class SystemDeptService { */ @Transactional(rollbackFor = Exception.class) - public void saveDept(CreateSystemDeptArgs resources) { + public void saveDept(SystemCreateDeptArgs resources) { systemDeptMapper.insert(BeanUtil.copyProperties(resources, SystemDeptTb.class)); systemDeptService.updateDeptSubCnt(resources.getPid()); } @@ -123,7 +123,7 @@ public class SystemDeptService { List deptList = new ArrayList<>(); // 使用 Set 存储所有部门的 id Set idSet = list.stream().map(SystemDeptTb::getId).collect(Collectors.toSet()); - // 遍历部门列表,筛选出没有父部门的部门 + // 遍历部门列表, 筛选出没有父部门的部门 for (SystemDeptTb dept : list) { if (!idSet.contains(dept.getPid())) { deptList.add(dept); @@ -141,8 +141,8 @@ public class SystemDeptService { * @throws Exception / */ - public List queryAllDept(QuerySystemDeptArgs criteria, Boolean isQuery) throws Exception { - String dataScopeType = SecurityHelper.getDataScopeType(); + public List queryAllDept(SystemQueryDeptArgs criteria, Boolean isQuery) throws Exception { + String dataScopeType = CsSecurityHelper.getDataScopeType(); if (isQuery) { if (dataScopeType.equals(SystemDataScopeEnum.ALL.getValue())) { criteria.setPidIsNull(true); @@ -153,7 +153,7 @@ public class SystemDeptService { add("enabled"); }}; for (Field field : fields) { - // 设置对象的访问权限,保证对private的属性的访问 + // 设置对象的访问权限, 保证对private的属性的访问 field.setAccessible(true); Object val = field.get(criteria); if (fieldNames.contains(field.getName())) { @@ -166,9 +166,9 @@ public class SystemDeptService { } } // 数据权限 - criteria.setIds(SecurityHelper.getCurrentUserDataScope()); + criteria.setIds(CsSecurityHelper.getCurrentUserDataScope()); List list = systemDeptMapper.selectDeptByArgs(criteria); - // 如果为空,就代表为自定义权限或者本级权限,就需要去重,不理解可以注释掉,看查询结果 + // 如果为空, 就代表为自定义权限或者本级权限, 就需要去重, 不理解可以注释掉,看查询结果 if (StringUtil.isBlank(dataScopeType)) { return deduplication(list); } diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemDictDetailService.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemDictDetailService.java index 6a3ea36d..91a21205 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemDictDetailService.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemDictDetailService.java @@ -3,8 +3,8 @@ package cn.odboy.system.service; import cn.hutool.core.bean.BeanUtil; import cn.odboy.base.CsResultVo; import cn.odboy.system.dal.dataobject.SystemDictDetailTb; -import cn.odboy.system.dal.model.CreateSystemDictDetailArgs; -import cn.odboy.system.dal.model.QuerySystemDictDetailArgs; +import cn.odboy.system.dal.model.SystemCreateDictDetailArgs; +import cn.odboy.system.dal.model.SystemQueryDictDetailArgs; import cn.odboy.system.dal.mysql.SystemDictDetailMapper; import cn.odboy.util.CsPageUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -26,7 +26,7 @@ public class SystemDictDetailService { */ @Transactional(rollbackFor = Exception.class) - public void saveDictDetail(CreateSystemDictDetailArgs resources) { + public void saveDictDetail(SystemCreateDictDetailArgs resources) { SystemDictDetailTb dictDetail = BeanUtil.copyProperties(resources, SystemDictDetailTb.class); dictDetail.setDictId(resources.getDict().getId()); systemDictDetailMapper.insert(dictDetail); @@ -64,7 +64,7 @@ public class SystemDictDetailService { * @return / */ - public CsResultVo> queryDictDetailByArgs(QuerySystemDictDetailArgs criteria, Page page) { + public CsResultVo> queryDictDetailByArgs(SystemQueryDictDetailArgs criteria, Page page) { return CsPageUtil.toPage(systemDictDetailMapper.selectDictDetailByArgs(criteria, page)); } @@ -76,7 +76,7 @@ public class SystemDictDetailService { */ public List queryDictDetailByName(String name) { - QuerySystemDictDetailArgs criteria = new QuerySystemDictDetailArgs(); + SystemQueryDictDetailArgs criteria = new SystemQueryDictDetailArgs(); criteria.setDictName(name); return systemDictDetailMapper.selectDictDetailByArgs(criteria); } diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemDictService.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemDictService.java index 6fbf0ef5..3523e254 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemDictService.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemDictService.java @@ -5,9 +5,9 @@ import cn.hutool.core.collection.CollectionUtil; import cn.odboy.base.CsResultVo; import cn.odboy.system.dal.dataobject.SystemDictDetailTb; import cn.odboy.system.dal.dataobject.SystemDictTb; -import cn.odboy.system.dal.model.CreateSystemDictArgs; -import cn.odboy.system.dal.model.QuerySystemDictArgs; -import cn.odboy.system.dal.model.QuerySystemDictDetailArgs; +import cn.odboy.system.dal.model.SystemCreateDictArgs; +import cn.odboy.system.dal.model.SystemQueryDictArgs; +import cn.odboy.system.dal.model.SystemQueryDictDetailArgs; import cn.odboy.system.dal.mysql.SystemDictDetailMapper; import cn.odboy.system.dal.mysql.SystemDictMapper; import cn.odboy.util.CsPageUtil; @@ -34,7 +34,7 @@ public class SystemDictService { */ @Transactional(rollbackFor = Exception.class) - public void saveDict(CreateSystemDictArgs resources) { + public void saveDict(SystemCreateDictArgs resources) { systemDictMapper.insert(BeanUtil.copyProperties(resources, SystemDictTb.class)); } @@ -77,7 +77,7 @@ public class SystemDictService { public void exportDictExcel(List dicts, HttpServletResponse response) throws IOException { List> list = new ArrayList<>(); for (SystemDictTb dict : dicts) { - QuerySystemDictDetailArgs criteria = new QuerySystemDictDetailArgs(); + SystemQueryDictDetailArgs criteria = new SystemQueryDictDetailArgs(); criteria.setDictName(dict.getName()); List dictDetails = systemDictDetailMapper.selectDictDetailByArgs(criteria); if (CollectionUtil.isNotEmpty(dictDetails)) { @@ -111,7 +111,7 @@ public class SystemDictService { * @return / */ - public CsResultVo> queryDictByArgs(QuerySystemDictArgs criteria, Page page) { + public CsResultVo> queryDictByArgs(SystemQueryDictArgs criteria, Page page) { return CsPageUtil.toPage(systemDictMapper.selectDictByArgs(criteria, page)); } @@ -122,7 +122,7 @@ public class SystemDictService { * @return / */ - public List queryDictByArgs(QuerySystemDictArgs criteria) { + public List queryDictByArgs(SystemQueryDictArgs criteria) { return systemDictMapper.selectDictByArgs(criteria); } diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemEmailService.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemEmailService.java index ac477dae..3f8c0db9 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemEmailService.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemEmailService.java @@ -4,13 +4,14 @@ import cn.hutool.core.lang.Dict; import cn.hutool.core.util.RandomUtil; import cn.hutool.extra.mail.Mail; import cn.hutool.extra.mail.MailAccount; +import cn.odboy.framework.exception.BadRequestException; +import cn.odboy.framework.properties.AppProperties; +import cn.odboy.framework.redis.RedisHelper; import cn.odboy.system.constant.SystemCaptchaBizEnum; import cn.odboy.system.dal.dataobject.SystemEmailConfigTb; -import cn.odboy.system.dal.model.SendSystemEmailArgs; +import cn.odboy.system.dal.model.SystemSendEmailArgs; import cn.odboy.system.dal.mysql.SystemEmailConfigMapper; import cn.odboy.util.CsResourceTemplateUtil; -import cn.odboy.framework.exception.BadRequestException; -import cn.odboy.framework.redis.RedisHelper; import cn.odboy.util.DesEncryptUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -26,8 +27,7 @@ import java.util.Collections; public class SystemEmailService { private final SystemEmailConfigMapper systemEmailConfigMapper; private final RedisHelper redisHelper; - @Value("${app.captcha.expireTime}") - private Long captchaExpireTime; + private final AppProperties properties; @Value("${spring.application.title}") private String applicationTitle; @@ -57,10 +57,10 @@ public class SystemEmailService { */ - public void sendEmail(SendSystemEmailArgs sendEmailRequest) { + public void sendEmail(SystemSendEmailArgs sendEmailRequest) { SystemEmailConfigTb systemEmailConfigTb = getLastEmailConfig(); if (systemEmailConfigTb.getId() == null) { - throw new BadRequestException("请先配置,再操作"); + throw new BadRequestException("请先配置, 再操作"); } // 封装 MailAccount account = new MailAccount(); @@ -81,7 +81,7 @@ public class SystemEmailService { account.setSslEnable(true); // 使用STARTTLS安全连接 account.setStarttlsEnable(true); - // 解决jdk8之后默认禁用部分tls协议,导致邮件发送失败的问题 + // 解决jdk8之后默认禁用部分tls协议, 导致邮件发送失败的问题 account.setSslProtocols("TLSv1 TLSv1.1 TLSv1.2"); String content = sendEmailRequest.getContent(); // 发送 @@ -129,15 +129,15 @@ public class SystemEmailService { if (oldCode == null) { String code = RandomUtil.randomNumbers(6); // 存入缓存 - if (!redisHelper.set(redisKey, code, captchaExpireTime)) { - throw new BadRequestException("服务异常,请联系网站负责人"); + if (!redisHelper.set(redisKey, code, properties.getCaptcha().getExpireTime())) { + throw new BadRequestException("服务异常, 请联系网站负责人"); } // 存在就再次发送原来的验证码 content = CsResourceTemplateUtil.render("system", biEnum.getTemplateName(), Dict.create().set("code", code)); } else { content = CsResourceTemplateUtil.render("system", biEnum.getTemplateName(), Dict.create().set("code", oldCode)); } - SendSystemEmailArgs sendEmailRequest = new SendSystemEmailArgs(Collections.singletonList(email), applicationTitle, content); + SystemSendEmailArgs sendEmailRequest = new SystemSendEmailArgs(Collections.singletonList(email), applicationTitle, content); sendEmail(sendEmailRequest); } diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemJobService.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemJobService.java index b2a53d33..2b21fd8e 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemJobService.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemJobService.java @@ -2,12 +2,12 @@ package cn.odboy.system.service; import cn.hutool.core.bean.BeanUtil; import cn.odboy.base.CsResultVo; +import cn.odboy.framework.exception.BadRequestException; import cn.odboy.system.dal.dataobject.SystemJobTb; -import cn.odboy.system.dal.model.CreateSystemJobArgs; -import cn.odboy.system.dal.model.QuerySystemJobArgs; +import cn.odboy.system.dal.model.SystemCreateJobArgs; +import cn.odboy.system.dal.model.SystemQueryJobArgs; import cn.odboy.system.dal.mysql.SystemJobMapper; import cn.odboy.system.dal.mysql.SystemUserMapper; -import cn.odboy.framework.exception.BadRequestException; import cn.odboy.util.CsPageUtil; import cn.odboy.util.FileUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -32,7 +32,7 @@ public class SystemJobService { */ @Transactional(rollbackFor = Exception.class) - public void saveJob(CreateSystemJobArgs resources) { + public void saveJob(SystemCreateJobArgs resources) { SystemJobTb job = systemJobMapper.getJobByName(resources.getName()); if (job != null) { throw new BadRequestException("职位名称已存在"); @@ -97,7 +97,7 @@ public class SystemJobService { */ - public CsResultVo> queryJobByArgs(QuerySystemJobArgs criteria, Page page) { + public CsResultVo> queryJobByArgs(SystemQueryJobArgs criteria, Page page) { return CsPageUtil.toPage(systemJobMapper.selectJobByArgs(criteria, page)); } @@ -108,7 +108,7 @@ public class SystemJobService { * @return / */ - public List queryJobByArgs(QuerySystemJobArgs criteria) { + public List queryJobByArgs(SystemQueryJobArgs criteria) { return systemJobMapper.selectJobByArgs(criteria, CsPageUtil.getCount(systemJobMapper)).getRecords(); } @@ -120,7 +120,7 @@ public class SystemJobService { public void verifyBindRelationByIds(Set ids) { if (systemUserMapper.countUserByJobIds(ids) > 0) { - throw new BadRequestException("所选的岗位中存在用户关联,请解除关联再试!"); + throw new BadRequestException("所选的岗位中存在用户关联, 请解除关联再试!"); } } } diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemLocalStorageService.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemLocalStorageService.java index ac5c30be..cb50634a 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemLocalStorageService.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemLocalStorageService.java @@ -4,12 +4,12 @@ import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUtil; import cn.hutool.core.io.IORuntimeException; import cn.odboy.base.CsResultVo; -import cn.odboy.system.dal.dataobject.SystemLocalStorageTb; -import cn.odboy.system.dal.model.QuerySystemLocalStorageArgs; -import cn.odboy.system.dal.mysql.SystemLocalStorageMapper; +import cn.odboy.framework.exception.BadRequestException; import cn.odboy.framework.properties.AppProperties; import cn.odboy.framework.server.core.FileUploadPathHelper; -import cn.odboy.framework.exception.BadRequestException; +import cn.odboy.system.dal.dataobject.SystemLocalStorageTb; +import cn.odboy.system.dal.model.SystemQueryStorageArgs; +import cn.odboy.system.dal.mysql.SystemLocalStorageMapper; import cn.odboy.util.CsPageUtil; import cn.odboy.util.FileUtil; import cn.odboy.util.StringUtil; @@ -29,8 +29,9 @@ import java.util.*; @RequiredArgsConstructor public class SystemLocalStorageService { private final SystemLocalStorageMapper systemLocalStorageMapper; - private final AppProperties properties; private final FileUploadPathHelper fileUploadPathHelper; + private final AppProperties properties; + /** * 上传 @@ -42,7 +43,7 @@ public class SystemLocalStorageService { @Transactional(rollbackFor = Exception.class) public SystemLocalStorageTb uploadFile(String name, MultipartFile multipartFile) { long size = multipartFile.getSize(); - FileUtil.checkSize(fileUploadPathHelper.getFileMaxSize(), size); + FileUtil.checkSize(properties.getOss().getMaxSize(), size); String suffix = FileUtil.getSuffix(multipartFile.getOriginalFilename()); String type = FileUtil.getFileType(suffix); String uploadDateStr = DateUtil.format(new Date(), DatePattern.PURE_DATE_FORMAT); @@ -128,7 +129,7 @@ public class SystemLocalStorageService { * @param page 分页参数 * @return / */ - public CsResultVo> queryLocalStorage(QuerySystemLocalStorageArgs criteria, Page page) { + public CsResultVo> queryLocalStorage(SystemQueryStorageArgs criteria, Page page) { return CsPageUtil.toPage(systemLocalStorageMapper.selectLocalStorageByArgs(criteria, page)); } @@ -138,7 +139,7 @@ public class SystemLocalStorageService { * @param criteria 条件 * @return / */ - public List queryLocalStorage(QuerySystemLocalStorageArgs criteria) { + public List queryLocalStorage(SystemQueryStorageArgs criteria) { return systemLocalStorageMapper.selectLocalStorageByArgs(criteria, CsPageUtil.getCount(systemLocalStorageMapper)).getRecords(); } } diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemMenuService.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemMenuService.java index 5abcd6e1..dfc0d6be 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemMenuService.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemMenuService.java @@ -3,15 +3,15 @@ package cn.odboy.system.service; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; +import cn.odboy.framework.exception.BadRequestException; import cn.odboy.system.constant.TransferProtocolConst; import cn.odboy.system.dal.dataobject.SystemMenuTb; import cn.odboy.system.dal.dataobject.SystemRoleTb; -import cn.odboy.system.dal.model.QuerySystemMenuArgs; import cn.odboy.system.dal.model.SystemMenuMetaVo; import cn.odboy.system.dal.model.SystemMenuVo; +import cn.odboy.system.dal.model.SystemQueryMenuArgs; import cn.odboy.system.dal.mysql.SystemMenuMapper; import cn.odboy.system.dal.mysql.SystemRoleMenuMapper; -import cn.odboy.framework.exception.BadRequestException; import cn.odboy.util.ClassUtil; import cn.odboy.util.FileUtil; import cn.odboy.util.StringUtil; @@ -182,18 +182,18 @@ public class SystemMenuService { * @throws Exception / */ - public List queryAllMenu(QuerySystemMenuArgs criteria, Boolean isQuery) throws Exception { + public List queryAllMenu(SystemQueryMenuArgs criteria, Boolean isQuery) throws Exception { if (Boolean.TRUE.equals(isQuery)) { criteria.setPidIsNull(true); List fields = ClassUtil.getAllFields(criteria.getClass(), new ArrayList<>()); for (Field field : fields) { - //设置对象的访问权限,保证对private的属性的访问 + //设置对象的访问权限, 保证对private的属性的访问 field.setAccessible(true); Object val = field.get(criteria); if ("pidIsNull".equals(field.getName())) { continue; } - // 如果有查询条件,则不指定pidIsNull + // 如果有查询条件, 则不指定pidIsNull if (ObjectUtil.isNotNull(val)) { criteria.setPidIsNull(null); break; @@ -228,7 +228,7 @@ public class SystemMenuService { } /** - * 获取所有子节点,包含自身ID + * 获取所有子节点, 包含自身ID * * @param menuList / * @param menuSet / @@ -324,7 +324,7 @@ public class SystemMenuService { List menuList = menu.getChildren(); SystemMenuVo menuVo = new SystemMenuVo(); menuVo.setName(ObjectUtil.isNotEmpty(menu.getComponentName()) ? menu.getComponentName() : menu.getTitle()); - // 一级目录需要加斜杠,不然会报警告 + // 一级目录需要加斜杠, 不然会报警告 menuVo.setPath(menu.getPid() == null ? "/" + menu.getPath() : menu.getPath()); menuVo.setHidden(menu.getHidden()); // 如果不是外链 diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemMonitorService.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemMonitorService.java index 1a3025cb..bcb743cf 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemMonitorService.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemMonitorService.java @@ -67,7 +67,7 @@ public class SystemMonitorService { String osName = System.getProperty("os.name"); long available = 0, total = 0; for (OSFileStore fs : fsArray) { - // windows 需要将所有磁盘分区累加,linux 和 mac 直接累加会出现磁盘重复的问题,待修复 + // windows 需要将所有磁盘分区累加, linux 和 mac 直接累加会出现磁盘重复的问题, 待修复 if (osName.toLowerCase().startsWith(SystemConst.WIN)) { available += fs.getUsableSpace(); total += fs.getTotalSpace(); diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemOssStorageService.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemOssStorageService.java new file mode 100644 index 00000000..97c7d312 --- /dev/null +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemOssStorageService.java @@ -0,0 +1,33 @@ +package cn.odboy.system.service; + +import cn.odboy.base.CsResultVo; +import cn.odboy.system.dal.dataobject.SystemOssStorageTb; +import cn.odboy.system.dal.model.SystemOssStorageVo; +import cn.odboy.system.dal.model.SystemQueryStorageArgs; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.List; + +/** + *

+ * OSS存储 服务类 + *

+ * + * @author codegen + * @since 2025-07-15 + */ +public interface SystemOssStorageService extends IService { + CsResultVo> queryOssStorage(SystemQueryStorageArgs criteria, Page page); + + List queryOssStorage(SystemQueryStorageArgs criteria); + + void exportOssStorageExcel(List list, HttpServletResponse response) throws IOException; + + void uploadFile(String name, MultipartFile file); + + void removeFileByIds(Long[] ids); +} diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemQiniuConfigService.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemQiniuConfigService.java deleted file mode 100644 index ab048958..00000000 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemQiniuConfigService.java +++ /dev/null @@ -1,52 +0,0 @@ -package cn.odboy.system.service; - -import cn.odboy.system.constant.TransferProtocolConst; -import cn.odboy.system.dal.dataobject.SystemQiniuConfigTb; -import cn.odboy.system.dal.mysql.SystemQiniuConfigMapper; -import cn.odboy.framework.exception.BadRequestException; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - - -@Service -@RequiredArgsConstructor -public class SystemQiniuConfigService { - private final SystemQiniuConfigMapper systemQiniuConfigMapper; - - /** - * 保存 - * - * @param qiniuConfig / - */ - @Transactional(rollbackFor = Exception.class) - public void saveQiniuConfig(SystemQiniuConfigTb qiniuConfig) { - qiniuConfig.setId(1L); - if (!(qiniuConfig.getHost().toLowerCase().startsWith(TransferProtocolConst.PREFIX_HTTP) || qiniuConfig.getHost().toLowerCase().startsWith(TransferProtocolConst.PREFIX_HTTPS))) { - throw new BadRequestException(TransferProtocolConst.PREFIX_HTTPS_BAD_REQUEST); - } - systemQiniuConfigMapper.insertOrUpdate(qiniuConfig); - } - - /** - * 更新 - * - * @param type 类型 - */ - @Transactional(rollbackFor = Exception.class) - public void modifyQiniuConfigType(String type) { - SystemQiniuConfigTb qiniuConfig = systemQiniuConfigMapper.selectById(1L); - qiniuConfig.setType(type); - systemQiniuConfigMapper.insertOrUpdate(qiniuConfig); - } - - /** - * 查询配置 - * - * @return / - */ - public SystemQiniuConfigTb getLastQiniuConfig() { - SystemQiniuConfigTb qiniuConfig = systemQiniuConfigMapper.selectById(1L); - return qiniuConfig == null ? new SystemQiniuConfigTb() : qiniuConfig; - } -} diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemQiniuContentService.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemQiniuContentService.java deleted file mode 100644 index e7c008e3..00000000 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemQiniuContentService.java +++ /dev/null @@ -1,239 +0,0 @@ -package cn.odboy.system.service; - -import cn.odboy.base.CsResultVo; -import cn.odboy.system.dal.dataobject.SystemQiniuConfigTb; -import cn.odboy.system.dal.dataobject.SystemQiniuContentTb; -import cn.odboy.system.dal.model.QuerySystemQiniuArgs; -import cn.odboy.system.dal.mysql.SystemQiniuContentMapper; -import cn.odboy.system.util.QiniuUtil; -import cn.odboy.framework.exception.BadRequestException; -import cn.odboy.util.CsPageUtil; -import cn.odboy.util.FileUtil; -import com.alibaba.fastjson2.JSON; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.qiniu.common.QiniuException; -import com.qiniu.http.Response; -import com.qiniu.storage.BucketManager; -import com.qiniu.storage.Configuration; -import com.qiniu.storage.UploadManager; -import com.qiniu.storage.model.DefaultPutRet; -import com.qiniu.storage.model.FileInfo; -import com.qiniu.util.Auth; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.web.multipart.MultipartFile; - -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; - -@Slf4j -@Service -@RequiredArgsConstructor -public class SystemQiniuContentService { - private final SystemQiniuContentMapper systemQiniuContentMapper; - private final SystemQiniuConfigService systemQiniuConfigService; - @Value("${app.oss.qiniu.max-size}") - private Long maxSize; - - /** - * 上传文件 - * - * @param file 文件 - * @return QiniuContent - */ - @Transactional(rollbackFor = Exception.class) - public SystemQiniuContentTb uploadFile(MultipartFile file) { - FileUtil.checkSize(maxSize, file.getSize()); - SystemQiniuConfigTb qiniuConfig = systemQiniuConfigService.getLastQiniuConfig(); - if (qiniuConfig.getId() == null) { - throw new BadRequestException("请先添加相应配置,再操作"); - } - // 构造一个带指定Zone对象的配置类 - Configuration cfg = new Configuration(QiniuUtil.getRegion(qiniuConfig.getZone())); - UploadManager uploadManager = new UploadManager(cfg); - Auth auth = Auth.create(qiniuConfig.getAccessKey(), qiniuConfig.getSecretKey()); - String upToken = auth.uploadToken(qiniuConfig.getBucket()); - try { - String key = file.getOriginalFilename(); - if (systemQiniuContentMapper.getQiniuContentByName(key) != null) { - key = QiniuUtil.getKey(key); - } - Response response = uploadManager.put(file.getBytes(), key, upToken); - // 解析上传成功的结果 - DefaultPutRet putRet = JSON.parseObject(response.bodyString(), DefaultPutRet.class); - String fileNameNoExt = FileUtil.getPrefix(putRet.key); - SystemQiniuContentTb content = systemQiniuContentMapper.getQiniuContentByName(fileNameNoExt); - if (content == null) { - // 存入数据库 - SystemQiniuContentTb qiniuContent = new SystemQiniuContentTb(); - qiniuContent.setSuffix(FileUtil.getSuffix(putRet.key)); - qiniuContent.setBucket(qiniuConfig.getBucket()); - qiniuContent.setType(qiniuConfig.getType()); - qiniuContent.setKey(fileNameNoExt); - qiniuContent.setUrl(qiniuConfig.getHost() + "/" + putRet.key); - qiniuContent.setSize(FileUtil.getSize(Integer.parseInt(String.valueOf(file.getSize())))); - systemQiniuContentMapper.insert(qiniuContent); - } - return content; - } catch (Exception e) { - throw new BadRequestException(e.getMessage()); - } - } - - /** - * 创建文件预览链接 - * - * @param content 文件信息 - * @return String - */ - public String createFilePreviewUrl(SystemQiniuContentTb content) { - SystemQiniuConfigTb qiniuConfig = systemQiniuConfigService.getLastQiniuConfig(); - String finalUrl; - String type = "公开"; - if (type.equals(content.getType())) { - finalUrl = content.getUrl(); - } else { - Auth auth = Auth.create(qiniuConfig.getAccessKey(), qiniuConfig.getSecretKey()); - // 1小时,可以自定义链接过期时间 - long expireInSeconds = 3600; - finalUrl = auth.privateDownloadUrl(content.getUrl(), expireInSeconds); - } - return finalUrl; - } - - /** - * 删除文件 - * - * @param id 文件id - */ - @Transactional(rollbackFor = Exception.class) - public void removeFileById(Long id) { - SystemQiniuConfigTb qiniuConfig = systemQiniuConfigService.getLastQiniuConfig(); - SystemQiniuContentTb qiniuContent = systemQiniuContentMapper.selectById(id); - if (qiniuContent == null) { - throw new BadRequestException("文件不存在"); - } - // 构造一个带指定Zone对象的配置类 - Configuration cfg = new Configuration(QiniuUtil.getRegion(qiniuConfig.getZone())); - Auth auth = Auth.create(qiniuConfig.getAccessKey(), qiniuConfig.getSecretKey()); - BucketManager bucketManager = new BucketManager(auth, cfg); - try { - bucketManager.delete(qiniuContent.getBucket(), qiniuContent.getKey() + "." + qiniuContent.getSuffix()); - } catch (QiniuException ex) { - log.error("七牛云删除文件失败", ex); - } finally { - systemQiniuContentMapper.deleteById(qiniuContent); - } - } - - /** - * 同步数据 - */ - @Transactional(rollbackFor = Exception.class) - public void synchronize() { - SystemQiniuConfigTb qiniuConfig = systemQiniuConfigService.getLastQiniuConfig(); - if (qiniuConfig.getId() == null) { - throw new BadRequestException("请先添加相应配置,再操作"); - } - //构造一个带指定Zone对象的配置类 - Configuration cfg = new Configuration(QiniuUtil.getRegion(qiniuConfig.getZone())); - Auth auth = Auth.create(qiniuConfig.getAccessKey(), qiniuConfig.getSecretKey()); - BucketManager bucketManager = new BucketManager(auth, cfg); - //文件名前缀 - String prefix = ""; - //每次迭代的长度限制,最大1000,推荐值 1000 - int limit = 1000; - //指定目录分隔符,列出所有公共前缀(模拟列出目录效果)。缺省值为空字符串 - String delimiter = ""; - //列举空间文件列表 - BucketManager.FileListIterator fileListIterator = bucketManager.createFileListIterator(qiniuConfig.getBucket(), prefix, limit, delimiter); - while (fileListIterator.hasNext()) { - //处理获取的file list结果 - SystemQiniuContentTb qiniuContent; - FileInfo[] items = fileListIterator.next(); - for (FileInfo item : items) { - String filename = FileUtil.getPrefix(item.key); - String suffix = FileUtil.getSuffix(item.key); - if (systemQiniuContentMapper.getQiniuContentByName(filename) == null) { - qiniuContent = new SystemQiniuContentTb(); - qiniuContent.setSize(FileUtil.getSize(Integer.parseInt(String.valueOf(item.fsize)))); - qiniuContent.setSuffix(suffix); - qiniuContent.setKey(filename); - qiniuContent.setType(qiniuConfig.getType()); - qiniuContent.setBucket(qiniuConfig.getBucket()); - qiniuContent.setUrl(qiniuConfig.getHost() + "/" + item.key); - systemQiniuContentMapper.insert(qiniuContent); - } - } - } - } - - /** - * 删除文件 - * - * @param ids 文件ID数组 - */ - @Transactional(rollbackFor = Exception.class) - public void removeFileByIds(Long[] ids) { - for (Long id : ids) { - SystemQiniuContentTb qiniuContent = systemQiniuContentMapper.selectById(id); - if (qiniuContent != null) { - removeFileById(id); - } - } - } - - /** - * 导出数据 - * - * @param queryAll / - * @param response / - * @throws IOException / - */ - public void exportQiniuContentExcel(List queryAll, HttpServletResponse response) throws IOException { - List> list = new ArrayList<>(); - for (SystemQiniuContentTb content : queryAll) { - Map map = new LinkedHashMap<>(); - map.put("文件名", content.getKey()); - map.put("文件类型", content.getSuffix()); - map.put("空间名称", content.getBucket()); - map.put("文件大小", content.getSize()); - map.put("空间类型", content.getType()); - map.put("创建日期", content.getUpdateTime()); - list.add(map); - } - FileUtil.downloadExcel(list, response); - } - - /** - * 分页查询 - * - * @param criteria 条件 - * @param page 分页参数 - * @return / - */ - public CsResultVo> queryQiniuContentByArgs(QuerySystemQiniuArgs criteria, Page page) { - return CsPageUtil.toPage(systemQiniuContentMapper.selectQiniuContentByArgs(criteria, page)); - } - - /** - * 查询全部 - * - * @param criteria 条件 - * @return / - */ - public List queryQiniuContentByArgs(QuerySystemQiniuArgs criteria) { - return systemQiniuContentMapper.selectQiniuContentByArgs(criteria, CsPageUtil.getCount(systemQiniuContentMapper)).getRecords(); - } - - public SystemQiniuContentTb getQiniuContentById(Long id) { - return systemQiniuContentMapper.selectById(id); - } -} diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemQuartzJobService.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemQuartzJobService.java index 8c8c97e3..cb4611d7 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemQuartzJobService.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemQuartzJobService.java @@ -4,15 +4,15 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; import cn.odboy.base.CsResultVo; +import cn.odboy.framework.exception.BadRequestException; +import cn.odboy.framework.redis.RedisHelper; import cn.odboy.system.dal.dataobject.SystemQuartzJobTb; import cn.odboy.system.dal.dataobject.SystemQuartzLogTb; -import cn.odboy.system.dal.model.QuerySystemQuartzJobArgs; -import cn.odboy.system.dal.model.UpdateSystemQuartzJobArgs; +import cn.odboy.system.dal.model.SystemQueryQuartzJobArgs; +import cn.odboy.system.dal.model.SystemUpdateQuartzJobArgs; import cn.odboy.system.dal.mysql.SystemQuartzJobMapper; import cn.odboy.system.dal.mysql.SystemQuartzLogMapper; import cn.odboy.system.framework.quartz.QuartzManage; -import cn.odboy.framework.exception.BadRequestException; -import cn.odboy.framework.redis.RedisHelper; import cn.odboy.util.CsPageUtil; import cn.odboy.util.FileUtil; import cn.odboy.util.StringUtil; @@ -56,7 +56,7 @@ public class SystemQuartzJobService { */ @Transactional(rollbackFor = Exception.class) - public void modifyQuartzJobResumeCron(UpdateSystemQuartzJobArgs resources) { + public void modifyQuartzJobResumeCron(SystemUpdateQuartzJobArgs resources) { if (!CronExpression.isValidExpression(resources.getCronExpression())) { throw new BadRequestException("cron表达式格式错误"); } @@ -126,7 +126,7 @@ public class SystemQuartzJobService { public void startSubQuartJob(String[] tasks) throws InterruptedException { for (String id : tasks) { if (StrUtil.isBlank(id)) { - // 如果是手动清除子任务id,会出现id为空字符串的问题 + // 如果是手动清除子任务id, 会出现id为空字符串的问题 continue; } SystemQuartzJobTb quartzJob = systemQuartzJobMapper.selectById(Long.parseLong(id)); @@ -139,10 +139,10 @@ public class SystemQuartzJobService { quartzJob.setUuid(uuid); // 执行任务 startQuartzJob(quartzJob); - // 获取执行状态,如果执行失败则停止后面的子任务执行 + // 获取执行状态, 如果执行失败则停止后面的子任务执行 Boolean result = redisHelper.get(uuid, Boolean.class); while (result == null) { - // 休眠5秒,再次获取子任务执行情况 + // 休眠5秒, 再次获取子任务执行情况 Thread.sleep(5000); result = redisHelper.get(uuid, Boolean.class); } @@ -212,7 +212,7 @@ public class SystemQuartzJobService { * @return / */ - public CsResultVo> queryQuartzJobByArgs(QuerySystemQuartzJobArgs criteria, Page page) { + public CsResultVo> queryQuartzJobByArgs(SystemQueryQuartzJobArgs criteria, Page page) { return CsPageUtil.toPage(systemQuartzJobMapper.selectQuartzJobByArgs(criteria, page)); } @@ -224,7 +224,7 @@ public class SystemQuartzJobService { * @return / */ - public CsResultVo> queryQuartzLogByArgs(QuerySystemQuartzJobArgs criteria, Page page) { + public CsResultVo> queryQuartzLogByArgs(SystemQueryQuartzJobArgs criteria, Page page) { return CsPageUtil.toPage(systemQuartzLogMapper.selectQuartzLogByArgs(criteria, page)); } @@ -235,7 +235,7 @@ public class SystemQuartzJobService { * @return / */ - public List queryQuartzJobByArgs(QuerySystemQuartzJobArgs criteria) { + public List queryQuartzJobByArgs(SystemQueryQuartzJobArgs criteria) { return systemQuartzJobMapper.selectQuartzJobByArgs(criteria, CsPageUtil.getCount(systemQuartzJobMapper)).getRecords(); } @@ -246,7 +246,7 @@ public class SystemQuartzJobService { * @return / */ - public List queryQuartzLogByArgs(QuerySystemQuartzJobArgs criteria) { + public List queryQuartzLogByArgs(SystemQueryQuartzJobArgs criteria) { return systemQuartzLogMapper.selectQuartzLogByArgs(criteria, CsPageUtil.getCount(systemQuartzLogMapper)).getRecords(); } diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemRoleService.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemRoleService.java index 5444a7fb..8684325d 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemRoleService.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemRoleService.java @@ -4,17 +4,17 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; import cn.odboy.base.CsResultVo; +import cn.odboy.framework.exception.BadRequestException; import cn.odboy.system.dal.dataobject.SystemMenuTb; import cn.odboy.system.dal.dataobject.SystemRoleTb; import cn.odboy.system.dal.dataobject.SystemUserTb; -import cn.odboy.system.dal.model.CreateSystemRoleArgs; -import cn.odboy.system.dal.model.QuerySystemRoleArgs; +import cn.odboy.system.dal.model.SystemCreateRoleArgs; +import cn.odboy.system.dal.model.SystemQueryRoleArgs; import cn.odboy.system.dal.model.SystemRoleCodeVo; import cn.odboy.system.dal.mysql.SystemRoleDeptMapper; import cn.odboy.system.dal.mysql.SystemRoleMapper; import cn.odboy.system.dal.mysql.SystemRoleMenuMapper; import cn.odboy.system.dal.mysql.SystemUserMapper; -import cn.odboy.framework.exception.BadRequestException; import cn.odboy.util.CsPageUtil; import cn.odboy.util.FileUtil; import cn.odboy.util.StringUtil; @@ -43,12 +43,12 @@ public class SystemRoleService { */ @Transactional(rollbackFor = Exception.class) - public void saveRole(CreateSystemRoleArgs resources) { + public void saveRole(SystemCreateRoleArgs resources) { if (systemRoleMapper.getRoleByName(resources.getName()) != null) { throw new BadRequestException("角色名称已存在"); } systemRoleMapper.insert(BeanUtil.copyProperties(resources, SystemRoleTb.class)); - // 判断是否有部门数据,若有,则需创建关联 + // 判断是否有部门数据, 若有, 则需创建关联 if (CollectionUtil.isNotEmpty(resources.getDepts())) { systemRoleDeptMapper.batchInsertRoleDept(resources.getDepts(), resources.getId()); } @@ -76,7 +76,7 @@ public class SystemRoleService { systemRoleMapper.insertOrUpdate(role); // 删除关联部门数据 systemRoleDeptMapper.batchDeleteRoleDept(Collections.singleton(resources.getId())); - // 判断是否有部门数据,若有,则需更新关联 + // 判断是否有部门数据, 若有, 则需更新关联 if (CollectionUtil.isNotEmpty(resources.getDepts())) { systemRoleDeptMapper.batchInsertRoleDept(resources.getDepts(), resources.getId()); } @@ -149,7 +149,7 @@ public class SystemRoleService { * @return */ - public List queryRoleByArgs(QuerySystemRoleArgs criteria) { + public List queryRoleByArgs(SystemQueryRoleArgs criteria) { return systemRoleMapper.selectRoleByArgs(criteria); } @@ -161,7 +161,7 @@ public class SystemRoleService { * @return */ - public CsResultVo> queryRoleByArgs(QuerySystemRoleArgs criteria, Page page) { + public CsResultVo> queryRoleByArgs(SystemQueryRoleArgs criteria, Page page) { criteria.setOffset(page.offset()); List roles = systemRoleMapper.selectRoleByArgs(criteria); Long total = systemRoleMapper.countRoleByArgs(criteria); @@ -229,7 +229,7 @@ public class SystemRoleService { public void verifyBindRelationByIds(Set ids) { if (systemUserMapper.countUserByRoleIds(ids) > 0) { - throw new BadRequestException("所选角色存在用户关联,请解除关联再试!"); + throw new BadRequestException("所选角色存在用户关联, 请解除关联再试!"); } } diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemUserService.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemUserService.java index bc312a99..c7e051cf 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemUserService.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemUserService.java @@ -2,19 +2,19 @@ package cn.odboy.system.service; import cn.hutool.core.util.StrUtil; import cn.odboy.base.CsResultVo; +import cn.odboy.framework.exception.BadRequestException; +import cn.odboy.framework.properties.AppProperties; +import cn.odboy.framework.server.core.FileUploadPathHelper; import cn.odboy.system.dal.dataobject.SystemJobTb; import cn.odboy.system.dal.dataobject.SystemRoleTb; import cn.odboy.system.dal.dataobject.SystemUserTb; -import cn.odboy.system.dal.model.QuerySystemUserArgs; +import cn.odboy.system.dal.model.SystemQueryUserArgs; import cn.odboy.system.dal.mysql.SystemUserJobMapper; import cn.odboy.system.dal.mysql.SystemUserMapper; import cn.odboy.system.dal.mysql.SystemUserRoleMapper; import cn.odboy.system.dal.redis.SystemUserInfoDAO; import cn.odboy.system.dal.redis.SystemUserOnlineInfoDAO; -import cn.odboy.system.framework.permission.core.SecurityHelper; -import cn.odboy.framework.properties.AppProperties; -import cn.odboy.framework.server.core.FileUploadPathHelper; -import cn.odboy.framework.exception.BadRequestException; +import cn.odboy.system.framework.permission.core.CsSecurityHelper; import cn.odboy.util.CsPageUtil; import cn.odboy.util.FileUtil; import cn.odboy.util.StringUtil; @@ -90,7 +90,7 @@ public class SystemUserService { if (user3 != null && !user.getId().equals(user3.getId())) { throw new BadRequestException("手机号已存在"); } - // 如果用户被禁用,则清除用户登录信息 + // 如果用户被禁用, 则清除用户登录信息 if (!resources.getEnabled()) { systemUserOnlineInfoDAO.kickOutByUsername(resources.getUsername()); } @@ -198,10 +198,10 @@ public class SystemUserService { @Transactional(rollbackFor = Exception.class) public Map modifyUserAvatar(MultipartFile multipartFile) { - SystemUserTb user = systemUserMapper.getUserByUsername(SecurityHelper.getCurrentUsername()); + SystemUserTb user = systemUserMapper.getUserByUsername(CsSecurityHelper.getCurrentUsername()); String username = user.getUsername(); if (StrUtil.isBlank(username)) { - throw new BadRequestException("异常用户数据,请联系管理员处理"); + throw new BadRequestException("异常用户数据, 请联系管理员处理"); } // 文件大小验证 FileUtil.checkSize(fileUploadPathHelper.getAvatarMaxSize(), multipartFile.getSize()); @@ -273,7 +273,7 @@ public class SystemUserService { * @return / */ - public CsResultVo> queryUserByArgs(QuerySystemUserArgs criteria, Page page) { + public CsResultVo> queryUserByArgs(SystemQueryUserArgs criteria, Page page) { criteria.setOffset(page.offset()); List users = systemUserMapper.selectUserByArgs(criteria, CsPageUtil.getCount(systemUserMapper)).getRecords(); Long total = systemUserMapper.countUserByArgs(criteria); @@ -287,7 +287,7 @@ public class SystemUserService { * @return / */ - public List queryUserByArgs(QuerySystemUserArgs criteria) { + public List queryUserByArgs(SystemQueryUserArgs criteria) { return systemUserMapper.selectUserByArgs(criteria, CsPageUtil.getCount(systemUserMapper)).getRecords(); } diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/impl/SystemOssStorageServiceImpl.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/impl/SystemOssStorageServiceImpl.java new file mode 100644 index 00000000..13c1d819 --- /dev/null +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/impl/SystemOssStorageServiceImpl.java @@ -0,0 +1,101 @@ +package cn.odboy.system.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.odboy.base.CsResultVo; +import cn.odboy.framework.exception.BadRequestException; +import cn.odboy.system.dal.dataobject.SystemOssStorageTb; +import cn.odboy.system.dal.model.SystemOssStorageVo; +import cn.odboy.system.dal.model.SystemQueryStorageArgs; +import cn.odboy.system.dal.mysql.SystemOssStorageMapper; +import cn.odboy.system.framework.storage.minio.MinioRepository; +import cn.odboy.system.service.SystemOssStorageService; +import cn.odboy.util.CsPageUtil; +import cn.odboy.util.FileUtil; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + *

+ * OSS存储 服务实现类 + *

+ * + * @author codegen + * @since 2025-07-15 + */ +@Service +@RequiredArgsConstructor +public class SystemOssStorageServiceImpl extends ServiceImpl implements SystemOssStorageService { + private final MinioRepository minioRepository; + + @Override + public CsResultVo> queryOssStorage(SystemQueryStorageArgs criteria, Page page) { + IPage ossStorageTbs = baseMapper.selectOssStorageByArgs(criteria, page); + IPage convert = ossStorageTbs.convert(c -> { + SystemOssStorageVo storageVo = BeanUtil.copyProperties(c, SystemOssStorageVo.class); + storageVo.setFileSizeDesc(FileUtil.getSize(storageVo.getFileSize())); + return storageVo; + }); + return CsPageUtil.toPage(convert); + } + + @Override + public List queryOssStorage(SystemQueryStorageArgs criteria) { + // 防止刷数据 + Page page = new Page<>(1, 500); + return queryOssStorage(criteria, page).getContent(); + } + + @Override + public void exportOssStorageExcel(List ossStorages, HttpServletResponse response) throws IOException { + List> list = new ArrayList<>(); + for (SystemOssStorageVo ossStorage : ossStorages) { + Map map = new LinkedHashMap<>(); + map.put("服务类型", ossStorage.getServiceType()); + map.put("服务地址", ossStorage.getEndpoint()); + map.put("存储桶名称", ossStorage.getBucketName()); + map.put("文件名称", ossStorage.getFileName()); + map.put("文件大小", ossStorage.getFileSizeDesc()); + map.put("文件类型", ossStorage.getFileMime()); + map.put("创建人", ossStorage.getCreateBy()); + map.put("创建日期", ossStorage.getCreateTime()); + list.add(map); + } + FileUtil.downloadExcel(list, response); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void uploadFile(String name, MultipartFile file) { + SystemOssStorageTb storageTb = minioRepository.upload(file); + if (storageTb == null) { + throw new BadRequestException("文件上传失败"); + } + save(storageTb); + } + + /** + * 多选删除 + * + * @param ids / + */ + @Transactional(rollbackFor = Exception.class) + public void removeFileByIds(Long[] ids) { + for (Long id : ids) { + SystemOssStorageTb storage = getById(id); + minioRepository.remove(storage.getObjectName()); + removeById(storage); + } + } +} diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/util/QiniuUtil.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/util/QiniuUtil.java deleted file mode 100644 index 08d7956c..00000000 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/util/QiniuUtil.java +++ /dev/null @@ -1,50 +0,0 @@ -package cn.odboy.system.util; - -import cn.odboy.util.FileUtil; -import com.qiniu.storage.Region; - -import java.text.SimpleDateFormat; -import java.util.Date; - -/** - * 七牛云存储工具类 - */ -public final class QiniuUtil { - - private static final String HUAD = "华东"; - - private static final String HUAB = "华北"; - - /** - * 得到机房的对应关系 - * - * @param zone 机房名称 - * @return Region - */ - public static Region getRegion(String zone) { - - if (HUAD.equals(zone)) { - return Region.huadong(); - } else if (HUAB.equals(zone)) { - return Region.huabei(); - } else { - // 否则就是东南亚 - return Region.qvmHuadong(); - } - } - - /** - * 默认不指定key的情况下,以文件内容的hash值作为文件名 - * - * @param file 文件名 - * @return String - */ - public static String getKey(String file) { - SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); - Date date = new Date(); - return FileUtil.getPrefix(file) + "-" + - sdf.format(date) + - "." + - FileUtil.getSuffix(file); - } -} diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/util/SqlUtil.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/util/SqlUtil.java index a42ee179..edea2978 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/util/SqlUtil.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/util/SqlUtil.java @@ -1,7 +1,7 @@ package cn.odboy.system.util; -import cn.odboy.framework.mybatisplus.config.DataTypeEnum; import cn.odboy.framework.exception.BadRequestException; +import cn.odboy.framework.mybatisplus.config.DataTypeEnum; import cn.odboy.util.CloseUtil; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.google.common.collect.Lists; diff --git a/cutejava/cutejava-module-system/src/main/resources/mapper/SystemOssStorageMapper.xml b/cutejava/cutejava-module-system/src/main/resources/mapper/SystemOssStorageMapper.xml new file mode 100644 index 00000000..ecb4fc3b --- /dev/null +++ b/cutejava/cutejava-module-system/src/main/resources/mapper/SystemOssStorageMapper.xml @@ -0,0 +1,23 @@ + + + + + diff --git a/cutejava/cutejava-module-system/src/main/resources/mapper/SystemQiniuContentMapper.xml b/cutejava/cutejava-module-system/src/main/resources/mapper/SystemQiniuContentMapper.xml deleted file mode 100644 index 4933252c..00000000 --- a/cutejava/cutejava-module-system/src/main/resources/mapper/SystemQiniuContentMapper.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - diff --git a/cutejava/cutejava-module-system/src/main/resources/template/SystemEmailCaptchaTemplate.ftl b/cutejava/cutejava-module-system/src/main/resources/template/SystemEmailCaptchaTemplate.ftl index 224d371f..b326253a 100644 --- a/cutejava/cutejava-module-system/src/main/resources/template/SystemEmailCaptchaTemplate.ftl +++ b/cutejava/cutejava-module-system/src/main/resources/template/SystemEmailCaptchaTemplate.ftl @@ -19,7 +19,7 @@ margin-top: 20px; border: 1px solid #eee;">
-

尊敬的用户,您好:

+

尊敬的用户, 您好:

您正在申请邮箱验证,您的验证码为:

5.8.0 1.4.7 - 7.9.3 @@ -46,12 +45,12 @@ org.springframework.boot spring-boot-starter-web - + org.springframework.boot spring-boot-starter-json - + org.springframework.boot spring-boot-starter-tomcat @@ -163,7 +162,7 @@ knife4j-spring-boot-starter 3.0.3 - + io.swagger swagger-annotations @@ -267,7 +266,7 @@ 1.13.0 - + com.alibaba transmittable-thread-local @@ -330,13 +329,6 @@ ${mail.version} - - - com.qiniu - qiniu-java-sdk - ${qiniu.version} - - org.springframework.boot