From c6eb668ac21e831daece026d6c7d8a8ca4a70c76 Mon Sep 17 00:00:00 2001 From: Odboy Date: Thu, 9 Oct 2025 12:23:57 +0800 Subject: [PATCH] upd --- .../framework/mybatisplus/core/CsMpQUtil.java | 462 +++++++++--------- .../server/core/ConfigurerAdapter.java | 28 +- .../controller/SystemAuthController.java | 12 +- .../controller/SystemCaptchaController.java | 6 +- .../controller/SystemComponentController.java | 5 +- .../controller/SystemDeptController.java | 17 +- .../controller/SystemDictController.java | 10 +- .../SystemDictDetailController.java | 11 +- .../controller/SystemEmailController.java | 6 +- .../controller/SystemJobController.java | 8 +- .../SystemLocalStorageController.java | 10 +- .../controller/SystemMenuController.java | 44 +- .../controller/SystemMonitorController.java | 3 +- .../controller/SystemOnlineController.java | 6 +- .../SystemOssStorageController.java | 170 +------ .../controller/SystemQuartzJobController.java | 14 +- .../controller/SystemRoleController.java | 16 +- .../controller/SystemUserController.java | 25 +- .../dal/dataobject/SystemRoleMenuTb.java | 16 + .../dal/mysql/SystemDictDetailMapper.java | 4 +- .../dal/mysql/SystemLocalStorageMapper.java | 4 +- .../system/dal/mysql/SystemMenuMapper.java | 4 +- .../dal/mysql/SystemQuartzJobMapper.java | 4 +- .../dal/mysql/SystemQuartzLogMapper.java | 4 +- .../dal/mysql/SystemRoleMenuMapper.java | 6 +- .../operalog/OperationLogAspect.java | 5 +- .../permission/config/AuthorityConfig.java | 6 +- .../permission/core/CsSecurityHelper.java | 3 +- .../core/handler/JwtAccessDeniedHandler.java | 8 +- .../handler/JwtAuthenticationEntryPoint.java | 6 +- .../permission/core/handler/TokenFilter.java | 3 +- .../framework/quartz/ExecutionJobBean.java | 6 +- .../InitialActiveJobApplicationRunner.java | 32 -- .../system/framework/quartz/QuartzManage.java | 6 +- .../storage/OssStorageConfiguration.java | 5 +- .../storage/local/MultipartConfig.java | 3 - .../storage/minio/MinioRepository.java | 52 +- .../system/service/SystemEmailService.java | 6 +- .../system/service/SystemMenuService.java | 49 +- .../resources/mapper/SystemRoleMenuMapper.xml | 5 - .../system/SystemEmailCaptchaTemplate.ftl | 50 -- .../SystemQuartzJobTaskAlarmTemplate.ftl | 71 --- .../src/main/java/cn/odboy/GenCode.java | 8 +- .../src/main/resources/application-dev.yml | 28 ++ .../src/main/resources/application-prod.yml | 36 +- .../src/main/resources/application-quartz.yml | 42 -- .../src/main/resources/application.yml | 2 +- cutejava/docs/dockerenv/mysql8/mysql/my.cnf | 2 + 48 files changed, 479 insertions(+), 850 deletions(-) create mode 100644 cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/dataobject/SystemRoleMenuTb.java delete mode 100644 cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/quartz/InitialActiveJobApplicationRunner.java delete mode 100644 cutejava/cutejava-module-system/src/main/resources/template/system/SystemEmailCaptchaTemplate.ftl delete mode 100644 cutejava/cutejava-module-system/src/main/resources/template/system/SystemQuartzJobTaskAlarmTemplate.ftl delete mode 100644 cutejava/cutejava-starter/src/main/resources/application-quartz.yml 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 6bcf4bf4..2606cca5 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 @@ -1,231 +1,231 @@ -/* - * Copyright 2021-2025 Odboy - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package cn.odboy.framework.mybatisplus.core; - -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.exception.web.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; -import com.baomidou.mybatisplus.annotation.TableName; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import lombok.extern.slf4j.Slf4j; - -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; -import java.lang.reflect.Field; -import java.util.*; -import java.util.stream.Collectors; - -/** - * 查询条件创建工具 - */ -@Slf4j -public class CsMpQUtil { - public static QueryWrapper build(Q query) { - QueryWrapper queryWrapper = new QueryWrapper<>(); - if (query == null) { - return queryWrapper; - } - Class clazz = query.getClass(); - try { - List fields = getAllFields(clazz, new ArrayList<>()); - for (Field field : fields) { - if (!field.canAccess(query)) { - field.setAccessible(true); - CsMpQuery q = field.getAnnotation(CsMpQuery.class); - if (q != null) { - String attributeName = getAttributeName(q, field); - Object fieldVal = field.get(query); - if (ObjectUtil.isNull(fieldVal) || "".equals(fieldVal)) { - continue; - } - if (StrUtil.isNotBlank(q.blurry())) { - handleBlurryQuery(queryWrapper, q.blurry(), fieldVal); - continue; - } - handleWrapper(q, queryWrapper, attributeName, fieldVal); - } - field.setAccessible(false); - } - } - } catch (Exception e) { - log.error("Failed to build query wrapper for class: {}", clazz.getName(), e); - } - return queryWrapper; - } - - private static String getAttributeName(CsMpQuery q, Field field) { - String attributeName = StrUtil.isBlank(q.propName()) ? field.getName() : q.propName(); - return StrUtil.toUnderlineCase(attributeName); - } - - private static void handleWrapper( - CsMpQuery q, - QueryWrapper queryWrapper, - String attributeName, - Object fieldVal) { - switch (q.type()) { - case EQUAL: - queryWrapper.eq(attributeName, fieldVal); - break; - case GREATER_THAN: - queryWrapper.ge(attributeName, fieldVal); - break; - case LESS_THAN: - queryWrapper.le(attributeName, fieldVal); - break; - case LESS_THAN_NQ: - queryWrapper.lt(attributeName, fieldVal); - break; - case INNER_LIKE: - queryWrapper.like(attributeName, fieldVal); - break; - case LEFT_LIKE: - queryWrapper.likeLeft(attributeName, fieldVal); - break; - case RIGHT_LIKE: - queryWrapper.likeRight(attributeName, fieldVal); - break; - case IN: - handleInOrNotQuery(true, queryWrapper, attributeName, fieldVal); - break; - case NOT_IN: - handleInOrNotQuery(false, queryWrapper, attributeName, fieldVal); - break; - case NOT_EQUAL: - queryWrapper.ne(attributeName, fieldVal); - break; - case NOT_NULL: - queryWrapper.isNotNull(attributeName); - break; - case IS_NULL: - queryWrapper.isNull(attributeName); - break; - case BETWEEN: - handleBetweenQuery(queryWrapper, fieldVal, attributeName); - break; - default: - break; - } - } - - private static void handleInOrNotQuery( - boolean b, - QueryWrapper queryWrapper, - String attributeName, - Object fieldVal) { - Collection wrapNotInVal = (Collection) fieldVal; - if (CollectionUtil.isNotEmpty(wrapNotInVal)) { - Optional anyValOptional = wrapNotInVal.stream().findAny(); - if (anyValOptional.isPresent()) { - Object o = anyValOptional.get(); - if (o instanceof Long) { - if (b) { - queryWrapper.in(attributeName, fieldVal); - } else { - queryWrapper.notIn(attributeName, fieldVal); - } - } else if (o instanceof Integer) { - if (b) { - queryWrapper.in(attributeName, fieldVal); - } else { - queryWrapper.notIn(attributeName, fieldVal); - } - } else { - throw new BadRequestException("InOrNotIn查询参数类型的对象属性值必须是Long/Integer类型集合"); - } - } - } - } - - private static void handleBetweenQuery(QueryWrapper queryWrapper, Object fieldVal, String finalAttributeName) { - if (fieldVal instanceof List) { - List between = new ArrayList<>((List) fieldVal); - int minLength = 2; - if (CollectionUtil.isNotEmpty(between) && between.size() >= minLength) { - queryWrapper.between(finalAttributeName, between.get(0), between.get(1)); - } else { - throw new BadRequestException("BETWEEN类型的对象列表长度必须 >= 2"); - } - } else { - throw new BadRequestException("BETWEEN类型的对象必须是一个List子集合"); - } - } - - /** - * 模糊多字段 - * - * @param queryWrapper / - * @param blurry / - * @param fieldVal / - * @param / - */ - private static void handleBlurryQuery(QueryWrapper queryWrapper, String blurry, Object fieldVal) { - List blurryList = - Arrays.stream(blurry.split(",")).filter(StrUtil::isNotBlank).distinct().collect(Collectors.toList()); - queryWrapper.and(wrapper -> { - for (String blurryItem : blurryList) { - String column = StrUtil.toUnderlineCase(blurryItem); - wrapper.or(); - wrapper.like(column, fieldVal.toString()); - } - }); - } - - public static List getAllFields(Class clazz, List fields) { - if (clazz != null) { - fields.addAll(Arrays.asList(clazz.getDeclaredFields())); - getAllFields(clazz.getSuperclass(), fields); - } - return fields; - } - - @TableName("test_domain") - private static class TestDomain { - @NotNull(groups = CsBaseUserTimeTb.Update.class) - @TableId(value = "user_id", type = IdType.AUTO) - private Long id; - @TableField(value = "dept_id") - private Long deptId; - @NotBlank - private String username; - @NotBlank - private String nickName; - } - - public static void main(String[] args) { - QueryWrapper query = new QueryWrapper(); - query.or(wrapper -> wrapper.eq("username", 1).or().eq("nickname", 2)); - query.eq("id", 1); - query.orderByDesc("id"); - System.err.println("getSqlSelect================================="); - System.err.println(query.getSqlSelect()); - System.err.println("getSqlSegment================================="); - System.err.println(query.getSqlSegment()); - System.err.println("getSqlComment================================="); - System.err.println(query.getSqlComment()); - System.err.println("getSqlSet================================="); - System.err.println(query.getSqlSet()); - System.err.println("getTargetSql================================="); - System.err.println(query.getTargetSql()); - } -} +/* + * Copyright 2021-2025 Odboy + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cn.odboy.framework.mybatisplus.core; + +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.exception.web.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; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import lombok.extern.slf4j.Slf4j; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.lang.reflect.Field; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 查询条件创建工具 + */ +@Slf4j +public class CsMpQUtil { + public static QueryWrapper build(Q query) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + if (query == null) { + return queryWrapper; + } + Class clazz = query.getClass(); + try { + List fields = getAllFields(clazz, new ArrayList<>()); + for (Field field : fields) { + if (!field.canAccess(query)) { + field.setAccessible(true); + CsMpQuery q = field.getAnnotation(CsMpQuery.class); + if (q != null) { + String attributeName = getAttributeName(q, field); + Object fieldVal = field.get(query); + if (ObjectUtil.isNull(fieldVal) || "".equals(fieldVal)) { + continue; + } + if (StrUtil.isNotBlank(q.blurry())) { + handleBlurryQuery(queryWrapper, q.blurry(), fieldVal); + continue; + } + handleWrapper(q, queryWrapper, attributeName, fieldVal); + } + field.setAccessible(false); + } + } + } catch (Exception e) { + log.error("Failed to build query wrapper for class: {}", clazz.getName(), e); + } + return queryWrapper; + } + + private static String getAttributeName(CsMpQuery q, Field field) { + String attributeName = StrUtil.isBlank(q.propName()) ? field.getName() : q.propName(); + return StrUtil.toUnderlineCase(attributeName); + } + + private static void handleWrapper( + CsMpQuery q, + QueryWrapper queryWrapper, + String attributeName, + Object fieldVal) { + switch (q.type()) { + case EQUAL: + queryWrapper.eq(attributeName, fieldVal); + break; + case GREATER_THAN: + queryWrapper.ge(attributeName, fieldVal); + break; + case LESS_THAN: + queryWrapper.le(attributeName, fieldVal); + break; + case LESS_THAN_NQ: + queryWrapper.lt(attributeName, fieldVal); + break; + case INNER_LIKE: + queryWrapper.like(attributeName, fieldVal); + break; + case LEFT_LIKE: + queryWrapper.likeLeft(attributeName, fieldVal); + break; + case RIGHT_LIKE: + queryWrapper.likeRight(attributeName, fieldVal); + break; + case IN: + handleInOrNotQuery(true, queryWrapper, attributeName, fieldVal); + break; + case NOT_IN: + handleInOrNotQuery(false, queryWrapper, attributeName, fieldVal); + break; + case NOT_EQUAL: + queryWrapper.ne(attributeName, fieldVal); + break; + case NOT_NULL: + queryWrapper.isNotNull(attributeName); + break; + case IS_NULL: + queryWrapper.isNull(attributeName); + break; + case BETWEEN: + handleBetweenQuery(queryWrapper, fieldVal, attributeName); + break; + default: + break; + } + } + + private static void handleInOrNotQuery( + boolean b, + QueryWrapper queryWrapper, + String attributeName, + Object fieldVal) { + Collection wrapNotInVal = (Collection) fieldVal; + if (CollectionUtil.isNotEmpty(wrapNotInVal)) { + Optional anyValOptional = wrapNotInVal.stream().findAny(); + if (anyValOptional.isPresent()) { + Object o = anyValOptional.get(); + if (o instanceof Long) { + if (b) { + queryWrapper.in(attributeName, fieldVal); + } else { + queryWrapper.notIn(attributeName, fieldVal); + } + } else if (o instanceof Integer) { + if (b) { + queryWrapper.in(attributeName, fieldVal); + } else { + queryWrapper.notIn(attributeName, fieldVal); + } + } else { + throw new BadRequestException("InOrNotIn查询参数类型的对象属性值必须是Long/Integer类型集合"); + } + } + } + } + + private static void handleBetweenQuery(QueryWrapper queryWrapper, Object fieldVal, String finalAttributeName) { + if (fieldVal instanceof List) { + List between = new ArrayList<>((List) fieldVal); + int minLength = 2; + if (CollectionUtil.isNotEmpty(between) && between.size() >= minLength) { + queryWrapper.between(finalAttributeName, between.get(0), between.get(1)); + } else { + throw new BadRequestException("BETWEEN类型的对象列表长度必须 >= 2"); + } + } else { + throw new BadRequestException("BETWEEN类型的对象必须是一个List子集合"); + } + } + + /** + * 模糊多字段 + * + * @param queryWrapper / + * @param blurry / + * @param fieldVal / + * @param / + */ + private static void handleBlurryQuery(QueryWrapper queryWrapper, String blurry, Object fieldVal) { + List blurryList = + Arrays.stream(blurry.split(",")).filter(StrUtil::isNotBlank).distinct().collect(Collectors.toList()); + queryWrapper.and(wrapper -> { + for (String blurryItem : blurryList) { + String column = StrUtil.toUnderlineCase(blurryItem); + wrapper.or(); + wrapper.like(column, fieldVal.toString()); + } + }); + } + + public static List getAllFields(Class clazz, List fields) { + if (clazz != null) { + fields.addAll(Arrays.asList(clazz.getDeclaredFields())); + getAllFields(clazz.getSuperclass(), fields); + } + return fields; + } + + @TableName("test_domain") + private static class TestDomain { + @NotNull(groups = CsBaseUserTimeTb.Update.class) + @TableId(value = "user_id", type = IdType.AUTO) + private Long id; + @TableField(value = "dept_id") + private Long deptId; + @NotBlank + private String username; + @NotBlank + private String nickName; + } + + public static void main(String[] args) { + QueryWrapper query = new QueryWrapper(); + query.or(wrapper -> wrapper.eq("username", 1).or().eq("nickname", 2)); + query.eq("id", 1); + query.orderByDesc("id"); + System.err.println("getSqlSelect================================="); + System.err.println(query.getSqlSelect()); + System.err.println("getSqlSegment================================="); + System.err.println(query.getSqlSegment()); + System.err.println("getSqlComment================================="); + System.err.println(query.getSqlComment()); + System.err.println("getSqlSet================================="); + System.err.println(query.getSqlSet()); + System.err.println("getTargetSql================================="); + System.err.println(query.getTargetSql()); + } +} 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 51a71724..10305bda 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 @@ -90,20 +90,20 @@ public class ConfigurerAdapter implements WebMvcConfigurer { FastJsonConfig config = new FastJsonConfig(); config.setDateFormat("yyyy-MM-dd HH:mm:ss"); // 开启引用检测, 枚举支持 - config.setWriterFeatures( - // 是否输出值为null的字段 - // SerializerFeature.WriteMapNullValue, - // 字段如果为null,输出为false,而非null - // JSONWriter.Feature.WriteNullBooleanAsFalse, - // 字段如果为null,输出为[],而非null - // JSONWriter.Feature.WriteNullListAsEmpty, - // 字符类型字段如果为null,输出为"",而非null - // JSONWriter.Feature.WriteNullStringAsEmpty, - // 太具体的数值会直接影响逻辑本身, 所以不要这个 - // SerializerFeature.WriteNullNumberAsZero, - JSONWriter.Feature.WriteEnumUsingToString, - // SerializerFeature.DisableCircularReferenceDetect, - JSONWriter.Feature.ReferenceDetection); + /// 是否输出值为null的字段 +// config.setWriterFeatures(JSONWriter.Feature.WriteMapNullValue); + /// 字段如果为null,输出为false,而非null +// config.setWriterFeatures(JSONWriter.Feature.WriteNullBooleanAsFalse); + /// 字段如果为null,输出为[],而非null +// config.setWriterFeatures(JSONWriter.Feature.WriteNullListAsEmpty); + /// 字符类型字段如果为null,输出为"",而非null +// config.setWriterFeatures(JSONWriter.Feature.WriteNullStringAsEmpty); + /// 太具体的数值会直接影响逻辑本身, 所以不要这个 +// config.setWriterFeatures(JSONWriter.Feature.WriteNullNumberAsZero); + /// 全局Long转字符串,会导致基础框架本身异常, 所以不要这个 +// config.setWriterFeatures(JSONWriter.Feature.WriteLongAsString); + config.setWriterFeatures(JSONWriter.Feature.WriteEnumUsingToString); + config.setWriterFeatures(JSONWriter.Feature.ReferenceDetection); fastJsonConverter.setFastJsonConfig(config); fastJsonConverter.setSupportedMediaTypes(supportMediaTypeList); fastJsonConverter.setDefaultCharset(StandardCharsets.UTF_8); 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 e392fa97..b397e4d0 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 @@ -79,12 +79,9 @@ public class SystemAuthController { @ApiOperation("登录授权") @AnonymousPostMapping(value = "/login") - public ResponseEntity> login( - @Validated @RequestBody SystemUserLoginArgs loginRequest, - HttpServletRequest request) throws Exception { + public ResponseEntity> login(@Validated @RequestBody SystemUserLoginArgs loginRequest, HttpServletRequest request) throws Exception { // 密码解密 - String password = - CsRsaEncryptUtil.decryptByPrivateKey(properties.getRsa().getPrivateKey(), loginRequest.getPassword()); + String password = CsRsaEncryptUtil.decryptByPrivateKey(properties.getRsa().getPrivateKey(), loginRequest.getPassword()); // 查询验证码 String code = redisHelper.get(loginRequest.getUuid(), String.class); // 清除验证码 @@ -136,8 +133,7 @@ public class SystemAuthController { String uuid = SystemCacheKey.CAPTCHA_LOGIN + IdUtil.simpleUUID(); //当验证码类型为 arithmetic时且长度 >= 2 时, captcha.text()的结果有几率为浮点型 String captchaValue = captcha.text(); - if (captcha.getCharType() - 1 == CaptchaCodeEnum.ARITHMETIC.ordinal() && - captchaValue.contains(SystemConst.SYMBOL_DOT)) { + if (captcha.getCharType() - 1 == CaptchaCodeEnum.ARITHMETIC.ordinal() && captchaValue.contains(SystemConst.SYMBOL_DOT)) { captchaValue = captchaValue.split("\\.")[0]; } // 保存 @@ -155,6 +151,6 @@ public class SystemAuthController { public ResponseEntity logout(HttpServletRequest request) { String token = tokenProvider.getToken(request); onlineUserService.logoutByToken(token); - return new ResponseEntity<>(HttpStatus.OK); + return ResponseEntity.ok(null); } } 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 937eabe7..574e2521 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 @@ -38,14 +38,14 @@ public class SystemCaptchaController { @PostMapping(value = "/sendResetEmailCaptcha") public ResponseEntity sendResetEmailCaptcha(@RequestParam String email) { systemEmailService.sendCaptcha(SystemCaptchaBizEnum.EMAIL_RESET_EMAIL_CODE, email); - return new ResponseEntity<>(HttpStatus.OK); + return ResponseEntity.ok(null); } @ApiOperation("重置密码,发送验证码") @PostMapping(value = "/sendResetPasswordCaptcha") public ResponseEntity sendResetPasswordCaptcha(@RequestParam String email) { systemEmailService.sendCaptcha(SystemCaptchaBizEnum.EMAIL_RESET_PWD_CODE, email); - return new ResponseEntity<>(HttpStatus.OK); + return ResponseEntity.ok(null); } @ApiOperation("验证码验证") @@ -53,6 +53,6 @@ public class SystemCaptchaController { public ResponseEntity checkEmailCaptcha(@Validated @RequestBody SystemCheckEmailCaptchaArgs args) { SystemCaptchaBizEnum biEnum = SystemCaptchaBizEnum.getByBizCode(args.getBizCode()); systemEmailService.checkEmailCaptcha(biEnum, args.getEmail(), args.getCode()); - return new ResponseEntity<>(HttpStatus.OK); + return ResponseEntity.ok(null); } } diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemComponentController.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemComponentController.java index f7aa6d33..f152ed71 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemComponentController.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemComponentController.java @@ -20,7 +20,6 @@ import cn.odboy.system.service.SystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.PostMapping; @@ -38,13 +37,13 @@ public class SystemComponentController { @PostMapping(value = "/queryDeptSelectDataSource") @PreAuthorize("@el.check()") public ResponseEntity queryDeptSelectDataSource() { - return new ResponseEntity<>(systemDeptService.queryDeptSelectDataSource(), HttpStatus.OK); + return ResponseEntity.ok(systemDeptService.queryDeptSelectDataSource()); } @ApiOperation("查询部门下拉选择Pro数据源") @PostMapping(value = "/queryDeptSelectProDataSource") @PreAuthorize("@el.check()") public ResponseEntity queryDeptSelectProDataSource() { - return new ResponseEntity<>(systemDeptService.queryDeptSelectProDataSource(), HttpStatus.OK); + return ResponseEntity.ok(systemDeptService.queryDeptSelectProDataSource()); } } 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 88017969..b1958e9a 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 @@ -56,19 +56,16 @@ public class SystemDeptController { @ApiOperation("查询部门") @PostMapping @PreAuthorize("@el.check('user:list','dept:list')") - public ResponseEntity> queryDept(@Validated @RequestBody CsPageArgs args) - throws Exception { + 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); + return ResponseEntity.ok(CsPageUtil.toPage(depts)); } @ApiOperation("查询部门:根据ID获取同级与上级数据") @PostMapping("/queryDeptSuperiorTree") @PreAuthorize("@el.check('user:list','dept:list')") - public ResponseEntity> queryDeptSuperiorTree( - @RequestBody List ids, - @RequestParam(defaultValue = "false") Boolean exclude) { + public ResponseEntity> queryDeptSuperiorTree(@RequestBody List ids, @RequestParam(defaultValue = "false") Boolean exclude) { Set deptSet = new LinkedHashSet<>(); for (Long id : ids) { // 同级数据 @@ -86,7 +83,7 @@ public class SystemDeptController { } deptSet.addAll(depts); } - return new ResponseEntity<>(systemDeptService.buildDeptTree(new ArrayList<>(deptSet)), HttpStatus.OK); + return ResponseEntity.ok(systemDeptService.buildDeptTree(new ArrayList<>(deptSet))); } @ApiOperation("新增部门") @@ -94,7 +91,7 @@ public class SystemDeptController { @PreAuthorize("@el.check('dept:add')") public ResponseEntity saveDept(@Validated @RequestBody SystemCreateDeptArgs args) { systemDeptService.saveDept(args); - return new ResponseEntity<>(HttpStatus.CREATED); + return ResponseEntity.ok(null); } @ApiOperation("修改部门") @@ -102,7 +99,7 @@ public class SystemDeptController { @PreAuthorize("@el.check('dept:edit')") public ResponseEntity modifyDept(@Validated(SystemDeptTb.Update.class) @RequestBody SystemDeptTb args) { systemDeptService.modifyDept(args); - return new ResponseEntity<>(HttpStatus.NO_CONTENT); + return ResponseEntity.ok(null); } @ApiOperation("删除部门") @@ -114,6 +111,6 @@ public class SystemDeptController { // 验证是否被角色或用户关联 systemDeptService.verifyBindRelationByIds(depts); systemDeptService.removeDeptByIds(depts); - return new ResponseEntity<>(HttpStatus.OK); + return ResponseEntity.ok(null); } } 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 37c65c72..1baebe2c 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 @@ -55,7 +55,7 @@ public class SystemDictController { @PostMapping(value = "/queryAllDict") @PreAuthorize("@el.check('dict:list')") public ResponseEntity> queryAllDict() { - return new ResponseEntity<>(systemDictService.queryDictByArgs(new SystemQueryDictArgs()), HttpStatus.OK); + return ResponseEntity.ok(systemDictService.queryDictByArgs(new SystemQueryDictArgs())); } @ApiOperation("查询字典") @@ -69,7 +69,7 @@ public class SystemDictController { } else { page = new Page<>(criteria.getPage(), criteria.getSize()); } - return new ResponseEntity<>(systemDictService.queryDictByArgs(criteria, page), HttpStatus.OK); + return ResponseEntity.ok(systemDictService.queryDictByArgs(criteria, page)); } @ApiOperation("新增字典") @@ -77,7 +77,7 @@ public class SystemDictController { @PreAuthorize("@el.check('dict:add')") public ResponseEntity saveDict(@Validated @RequestBody SystemCreateDictArgs args) { systemDictService.saveDict(args); - return new ResponseEntity<>(HttpStatus.CREATED); + return ResponseEntity.ok(null); } @ApiOperation("修改字典") @@ -85,7 +85,7 @@ public class SystemDictController { @PreAuthorize("@el.check('dict:edit')") public ResponseEntity modifyDictById(@Validated(SystemDictTb.Update.class) @RequestBody SystemDictTb args) { systemDictService.modifyDictById(args); - return new ResponseEntity<>(HttpStatus.NO_CONTENT); + return ResponseEntity.ok(null); } @ApiOperation("删除字典") @@ -93,6 +93,6 @@ public class SystemDictController { @PreAuthorize("@el.check('dict:del')") public ResponseEntity removeDictByIds(@RequestBody Set ids) { systemDictService.removeDictByIds(ids); - return new ResponseEntity<>(HttpStatus.OK); + return ResponseEntity.ok(null); } } 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 050b33dc..197959b2 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 @@ -26,7 +26,6 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; @@ -54,7 +53,7 @@ public class SystemDictDetailController { 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); + return ResponseEntity.ok(systemDictDetailService.queryDictDetailByArgs(criteria, page)); } @ApiOperation("查询多个字典详情") @@ -65,7 +64,7 @@ public class SystemDictDetailController { for (String name : names) { dictMap.put(name, systemDictDetailService.queryDictDetailByName(name)); } - return new ResponseEntity<>(dictMap, HttpStatus.OK); + return ResponseEntity.ok(dictMap); } @ApiOperation("新增字典详情") @@ -73,7 +72,7 @@ public class SystemDictDetailController { @PreAuthorize("@el.check('dict:add')") public ResponseEntity saveDictDetail(@Validated @RequestBody SystemCreateDictDetailArgs args) { systemDictDetailService.saveDictDetail(args); - return new ResponseEntity<>(HttpStatus.CREATED); + return ResponseEntity.ok(null); } @ApiOperation("修改字典详情") @@ -81,7 +80,7 @@ public class SystemDictDetailController { @PreAuthorize("@el.check('dict:edit')") public ResponseEntity modifyDictDetailById(@Validated(SystemDictDetailTb.Update.class) @RequestBody SystemDictDetailTb args) { systemDictDetailService.modifyDictDetailById(args); - return new ResponseEntity<>(HttpStatus.NO_CONTENT); + return ResponseEntity.ok(null); } @ApiOperation("删除字典详情") @@ -89,6 +88,6 @@ public class SystemDictDetailController { @PreAuthorize("@el.check('dict:del')") public ResponseEntity removeDictDetailById(@RequestBody SystemDictDetailTb args) { systemDictDetailService.removeDictDetailById(args.getId()); - return new ResponseEntity<>(HttpStatus.OK); + return ResponseEntity.ok(null); } } 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 4c01b453..c306d05b 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 @@ -43,7 +43,7 @@ public class SystemEmailController { @ApiOperation("查询配置") @PostMapping(value = "/getLastEmailConfig") public ResponseEntity getLastEmailConfig() { - return new ResponseEntity<>(systemEmailService.getLastEmailConfig(), HttpStatus.OK); + return ResponseEntity.ok(systemEmailService.getLastEmailConfig()); } @ApiOperation("配置邮件") @@ -51,13 +51,13 @@ public class SystemEmailController { public ResponseEntity modifyEmailConfig(@Validated @RequestBody SystemEmailConfigTb emailConfig) throws Exception { systemEmailService.modifyEmailConfig(emailConfig); - return new ResponseEntity<>(HttpStatus.OK); + return ResponseEntity.ok(null); } @ApiOperation("发送邮件") @PostMapping(value = "/sendEmail") public ResponseEntity sendEmail(@Validated @RequestBody SystemSendEmailArgs sendEmailRequest) { systemEmailService.sendEmail(sendEmailRequest); - return new ResponseEntity<>(HttpStatus.OK); + return ResponseEntity.ok(null); } } 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 c7ed69a4..45ff2a43 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 @@ -56,7 +56,7 @@ public class SystemJobController { 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); + return ResponseEntity.ok(systemJobService.queryJobByArgs(criteria, page)); } @ApiOperation("查询岗位") @@ -71,7 +71,7 @@ public class SystemJobController { @PreAuthorize("@el.check('job:add')") public ResponseEntity saveJob(@Validated @RequestBody SystemCreateJobArgs args) { systemJobService.saveJob(args); - return new ResponseEntity<>(HttpStatus.CREATED); + return ResponseEntity.ok(null); } @ApiOperation("修改岗位") @@ -79,7 +79,7 @@ public class SystemJobController { @PreAuthorize("@el.check('job:edit')") public ResponseEntity modifyJobById(@Validated(SystemJobTb.Update.class) @RequestBody SystemJobTb args) { systemJobService.modifyJobById(args); - return new ResponseEntity<>(HttpStatus.NO_CONTENT); + return ResponseEntity.ok(null); } @ApiOperation("删除岗位") @@ -89,6 +89,6 @@ public class SystemJobController { // 验证是否被用户关联 systemJobService.verifyBindRelationByIds(ids); systemJobService.removeJobByIds(ids); - return new ResponseEntity<>(HttpStatus.OK); + return ResponseEntity.ok(null); } } 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 dc60edc6..38d8af1e 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 @@ -51,7 +51,7 @@ public class SystemLocalStorageController { 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); + return ResponseEntity.ok(localStorageService.queryLocalStorage(criteria, page)); } @ApiOperation("导出数据") @@ -66,7 +66,7 @@ public class SystemLocalStorageController { @PreAuthorize("@el.check('storage:add')") public ResponseEntity uploadFile(@RequestParam String name, @RequestParam("file") MultipartFile file) { localStorageService.uploadFile(name, file); - return new ResponseEntity<>(HttpStatus.CREATED); + return ResponseEntity.ok(null); } @ApiOperation("上传图片") @@ -78,7 +78,7 @@ public class SystemLocalStorageController { throw new BadRequestException("只能上传图片"); } SystemLocalStorageTb localStorage = localStorageService.uploadFile(null, file); - return new ResponseEntity<>(localStorage, HttpStatus.OK); + return ResponseEntity.ok(localStorage); } @ApiOperation("修改文件") @@ -86,13 +86,13 @@ public class SystemLocalStorageController { @PreAuthorize("@el.check('storage:edit')") public ResponseEntity modifyLocalStorageById(@Validated @RequestBody SystemLocalStorageTb args) { localStorageService.modifyLocalStorageById(args); - return new ResponseEntity<>(HttpStatus.NO_CONTENT); + return ResponseEntity.ok(null); } @ApiOperation("多选删除") @PostMapping(value = "/removeFileByIds") public ResponseEntity deleteFileByIds(@RequestBody Long[] ids) { localStorageService.removeFileByIds(ids); - return new ResponseEntity<>(HttpStatus.OK); + return ResponseEntity.ok(null); } } 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 71385f08..1eda16f2 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 @@ -23,13 +23,13 @@ import cn.odboy.framework.exception.web.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.dal.mysql.SystemMenuMapper; 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; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; @@ -45,6 +45,8 @@ import java.util.stream.Collectors; public class SystemMenuController { @Autowired private SystemMenuService systemMenuService; + @Autowired + private SystemMenuMapper systemMenuMapper; @ApiOperation("导出菜单数据") @GetMapping(value = "/download") @@ -58,14 +60,14 @@ public class SystemMenuController { public ResponseEntity> buildMenus() { List menuList = systemMenuService.queryMenuListByUserId(CsSecurityHelper.getCurrentUserId()); List menus = systemMenuService.buildMenuTree(menuList); - return new ResponseEntity<>(systemMenuService.buildMenuVo(menus), HttpStatus.OK); + return ResponseEntity.ok(systemMenuService.buildMenuVo(menus)); } @ApiOperation("返回全部的菜单") @PostMapping(value = "/queryMenuListByPid") @PreAuthorize("@el.check('menu:list','roles:list')") public ResponseEntity> queryMenuListByPid(@RequestParam Long pid) { - return new ResponseEntity<>(systemMenuService.queryMenuByPid(pid), HttpStatus.OK); + return ResponseEntity.ok(systemMenuService.queryMenuByPid(pid)); } @ApiOperation("根据菜单ID返回所有子节点ID, 包含自身ID") @@ -74,38 +76,36 @@ public class SystemMenuController { public ResponseEntity> queryChildMenuSet(@RequestParam Long id) { Set menuSet = new HashSet<>(); List menuList = systemMenuService.queryMenuByPid(id); - menuSet.add(systemMenuService.getMenuById(id)); + menuSet.add(systemMenuMapper.selectById(id)); menuSet = systemMenuService.queryChildMenu(menuList, menuSet); Set ids = menuSet.stream().map(SystemMenuTb::getId).collect(Collectors.toSet()); - return new ResponseEntity<>(ids, HttpStatus.OK); + return ResponseEntity.ok(ids); } @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 { + 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); + return ResponseEntity.ok(CsPageUtil.toPage(menuList)); } @ApiOperation("查询菜单:根据ID获取同级与上级数据") @PostMapping("/queryMenuSuperior") @PreAuthorize("@el.check('menu:list')") public ResponseEntity> queryMenuSuperior(@RequestBody List ids) { - Set menus = new LinkedHashSet<>(); + Set menus; if (CollectionUtil.isNotEmpty(ids)) { - for (Long id : ids) { - SystemMenuTb menu = systemMenuService.getMenuById(id); + menus = new LinkedHashSet<>(systemMenuService.queryMenuByIds(ids)); + for (SystemMenuTb menu : menus) { List menuList = systemMenuService.querySuperiorMenuList(menu, new ArrayList<>()); for (SystemMenuTb data : menuList) { if (data.getId().equals(menu.getPid())) { @@ -116,9 +116,9 @@ public class SystemMenuController { } // 编辑菜单时不显示自己以及自己下级的数据, 避免出现PID数据环形问题 menus = menus.stream().filter(i -> !ids.contains(i.getId())).collect(Collectors.toSet()); - return new ResponseEntity<>(systemMenuService.buildMenuTree(new ArrayList<>(menus)), HttpStatus.OK); + return ResponseEntity.ok(systemMenuService.buildMenuTree(new ArrayList<>(menus))); } - return new ResponseEntity<>(systemMenuService.queryMenuByPid(null), HttpStatus.OK); + return ResponseEntity.ok(systemMenuService.queryMenuByPid(null)); } @ApiOperation("新增菜单") @@ -129,7 +129,7 @@ public class SystemMenuController { throw new BadRequestException("无效参数id"); } systemMenuService.saveMenu(args); - return new ResponseEntity<>(HttpStatus.CREATED); + return ResponseEntity.ok(null); } @ApiOperation("修改菜单") @@ -137,20 +137,14 @@ public class SystemMenuController { @PreAuthorize("@el.check('menu:edit')") public ResponseEntity modifyMenuById(@Validated(SystemMenuTb.Update.class) @RequestBody SystemMenuTb args) { systemMenuService.modifyMenuById(args); - return new ResponseEntity<>(HttpStatus.NO_CONTENT); + return ResponseEntity.ok(null); } @ApiOperation("删除菜单") @PostMapping(value = "/removeMenuByIds") @PreAuthorize("@el.check('menu:del')") public ResponseEntity removeMenuByIds(@RequestBody Set ids) { - Set menuSet = new HashSet<>(); - for (Long id : ids) { - List menuList = systemMenuService.queryMenuByPid(id); - menuSet.add(systemMenuService.getMenuById(id)); - menuSet = systemMenuService.queryChildMenu(menuList, menuSet); - } - systemMenuService.removeMenuByIds(menuSet); - return new ResponseEntity<>(HttpStatus.OK); + systemMenuService.removeMenuByIds(ids); + return ResponseEntity.ok(null); } } diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemMonitorController.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemMonitorController.java index 75044a41..a9260d8e 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemMonitorController.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemMonitorController.java @@ -20,7 +20,6 @@ import cn.odboy.system.service.SystemMonitorService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.PostMapping; @@ -40,6 +39,6 @@ public class SystemMonitorController { @ApiOperation("查询服务监控") @PreAuthorize("@el.check('monitor:list')") public ResponseEntity> queryServerMonitorInfo() { - return new ResponseEntity<>(systemMonitorService.queryServerMonitorInfo(), HttpStatus.OK); + return ResponseEntity.ok(systemMonitorService.queryServerMonitorInfo()); } } diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemOnlineController.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemOnlineController.java index a600f77a..8c60136d 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemOnlineController.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemOnlineController.java @@ -48,9 +48,7 @@ public class SystemOnlineController { @PreAuthorize("@el.check()") public ResponseEntity> queryOnlineUser(@Validated @RequestBody CsPageArgs args) { IPage page = new Page<>(args.getPage(), args.getSize()); - return new ResponseEntity<>( - systemUserOnlineInfoRedis.queryUserOnlineModelPage(args.getArgs(), page), - HttpStatus.OK); + return ResponseEntity.ok(systemUserOnlineInfoRedis.queryUserOnlineModelPage(args.getArgs(), page)); } @ApiOperation("导出数据") @@ -70,6 +68,6 @@ public class SystemOnlineController { token = CsDesEncryptUtil.desDecrypt(token); systemUserOnlineInfoRedis.logoutByToken(token); } - return new ResponseEntity<>(HttpStatus.OK); + return ResponseEntity.ok(null); } } 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 index bf241b42..ad4af42c 100644 --- 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 @@ -27,7 +27,6 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; @@ -51,7 +50,7 @@ public class SystemOssStorageController { 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); + return ResponseEntity.ok(systemOssStorageService.queryOssStorage(criteria, page)); } @ApiOperation("导出数据") @@ -73,171 +72,6 @@ public class SystemOssStorageController { @PostMapping(value = "/removeFileByIds") public ResponseEntity removeFileByIds(@RequestBody Long[] ids) { systemOssStorageService.removeFileByIds(ids); - return new ResponseEntity<>(HttpStatus.OK); + return ResponseEntity.ok(null); } - - // @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 BadRequestException("文件名为空"); - // } - // 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 BadRequestException(e); - // } - // } } 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 e2f850a9..2175e3a0 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 @@ -54,7 +54,7 @@ public class SystemQuartzJobController { 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); + return ResponseEntity.ok(systemQuartzJobService.queryQuartzJobByArgs(criteria, page)); } @ApiOperation("导出任务数据") @@ -76,7 +76,7 @@ public class SystemQuartzJobController { @PreAuthorize("@el.check('quartzJob:list')") public ResponseEntity> queryQuartzJobLog(SystemQueryQuartzJobArgs args) { Page page = new Page<>(args.getPage(), args.getSize()); - return new ResponseEntity<>(systemQuartzJobService.queryQuartzLogByArgs(args, page), HttpStatus.OK); + return ResponseEntity.ok(systemQuartzJobService.queryQuartzLogByArgs(args, page)); } @ApiOperation("新增定时任务") @@ -89,7 +89,7 @@ public class SystemQuartzJobController { // 验证Bean是不是合法的, 合法的定时任务 Bean 需要用 @Service 定义 checkBean(args.getBeanName()); systemQuartzJobService.createJob(args); - return new ResponseEntity<>(HttpStatus.CREATED); + return ResponseEntity.ok(null); } @ApiOperation("修改定时任务") @@ -99,7 +99,7 @@ public class SystemQuartzJobController { // 验证Bean是不是合法的, 合法的定时任务 Bean 需要用 @Service 定义 checkBean(args.getBeanName()); systemQuartzJobService.modifyQuartzJobResumeCron(args); - return new ResponseEntity<>(HttpStatus.NO_CONTENT); + return ResponseEntity.ok(null); } @ApiOperation("更改定时任务状态") @@ -107,7 +107,7 @@ public class SystemQuartzJobController { @PreAuthorize("@el.check('quartzJob:edit')") public ResponseEntity switchQuartzJobStatus(@PathVariable Long id) { systemQuartzJobService.switchQuartzJobStatus(systemQuartzJobService.getQuartzJobById(id)); - return new ResponseEntity<>(HttpStatus.NO_CONTENT); + return ResponseEntity.ok(null); } @ApiOperation("执行定时任务") @@ -115,7 +115,7 @@ public class SystemQuartzJobController { @PreAuthorize("@el.check('quartzJob:edit')") public ResponseEntity startQuartzJob(@PathVariable Long id) { systemQuartzJobService.startQuartzJob(systemQuartzJobService.getQuartzJobById(id)); - return new ResponseEntity<>(HttpStatus.NO_CONTENT); + return ResponseEntity.ok(null); } @ApiOperation("删除定时任务") @@ -123,7 +123,7 @@ public class SystemQuartzJobController { @PreAuthorize("@el.check('quartzJob:del')") public ResponseEntity removeJobByIds(@RequestBody Set ids) { systemQuartzJobService.removeJobByIds(ids); - return new ResponseEntity<>(HttpStatus.OK); + return ResponseEntity.ok(null); } /** 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 e9a9e420..a357c5fc 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 @@ -53,7 +53,7 @@ public class SystemRoleController { @PostMapping(value = "/queryRoleById") @PreAuthorize("@el.check('roles:list')") public ResponseEntity queryRoleById(@RequestBody SystemRoleTb args) { - return new ResponseEntity<>(systemRoleService.getRoleById(args.getId()), HttpStatus.OK); + return ResponseEntity.ok(systemRoleService.getRoleById(args.getId())); } @ApiOperation("导出角色数据") @@ -67,7 +67,7 @@ public class SystemRoleController { @PostMapping(value = "/queryRoleList") @PreAuthorize("@el.check('roles:list','user:add','user:edit')") public ResponseEntity> queryRoleList() { - return new ResponseEntity<>(systemRoleService.queryAllRole(), HttpStatus.OK); + return ResponseEntity.ok(systemRoleService.queryAllRole()); } @ApiOperation("查询角色") @@ -76,13 +76,13 @@ public class SystemRoleController { 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); + return ResponseEntity.ok(systemRoleService.queryRoleByArgs(criteria, page)); } @ApiOperation("获取用户级别") @PostMapping(value = "/queryRoleLevel") public ResponseEntity queryRoleLevel() { - return new ResponseEntity<>(Dict.create().set("level", checkRoleLevels(null)), HttpStatus.OK); + return ResponseEntity.ok(Dict.create().set("level", checkRoleLevels(null))); } @ApiOperation("新增角色") @@ -91,7 +91,7 @@ public class SystemRoleController { public ResponseEntity saveRole(@Validated @RequestBody SystemCreateRoleArgs args) { checkRoleLevels(args.getLevel()); systemRoleService.saveRole(args); - return new ResponseEntity<>(HttpStatus.CREATED); + return ResponseEntity.ok(null); } @ApiOperation("修改角色") @@ -100,7 +100,7 @@ public class SystemRoleController { public ResponseEntity modifyRoleById(@Validated(SystemRoleTb.Update.class) @RequestBody SystemRoleTb args) { checkRoleLevels(args.getLevel()); systemRoleService.modifyRoleById(args); - return new ResponseEntity<>(HttpStatus.NO_CONTENT); + return ResponseEntity.ok(null); } @ApiOperation("修改角色菜单") @@ -110,7 +110,7 @@ public class SystemRoleController { SystemRoleTb role = systemRoleService.getRoleById(args.getId()); checkRoleLevels(role.getLevel()); systemRoleService.modifyBindMenuById(args); - return new ResponseEntity<>(HttpStatus.NO_CONTENT); + return ResponseEntity.ok(null); } @ApiOperation("删除角色") @@ -124,7 +124,7 @@ public class SystemRoleController { // 验证是否被用户关联 systemRoleService.verifyBindRelationByIds(ids); systemRoleService.removeRoleByIds(ids); - return new ResponseEntity<>(HttpStatus.OK); + return ResponseEntity.ok(null); } /** 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 0e27185d..9fd4db6a 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 @@ -37,7 +37,6 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.crypto.password.PasswordEncoder; @@ -98,14 +97,14 @@ public class SystemUserController { // 取交集 criteria.getDeptIds().retainAll(dataScopes); if (!CollectionUtil.isEmpty(criteria.getDeptIds())) { - return new ResponseEntity<>(systemUserService.queryUserByArgs(criteria, page), HttpStatus.OK); + return ResponseEntity.ok(systemUserService.queryUserByArgs(criteria, page)); } } else { // 否则取并集 criteria.getDeptIds().addAll(dataScopes); - return new ResponseEntity<>(systemUserService.queryUserByArgs(criteria, page), HttpStatus.OK); + return ResponseEntity.ok(systemUserService.queryUserByArgs(criteria, page)); } - return new ResponseEntity<>(CsPageUtil.emptyData(), HttpStatus.OK); + return ResponseEntity.ok(CsPageUtil.emptyData()); } @ApiOperation("新增用户") @@ -116,7 +115,7 @@ public class SystemUserController { // 默认密码 123456 args.setPassword(passwordEncoder.encode("123456")); systemUserService.saveUser(args); - return new ResponseEntity<>(HttpStatus.CREATED); + return ResponseEntity.ok(null); } @ApiOperation("修改用户") @@ -125,7 +124,7 @@ public class SystemUserController { public ResponseEntity modifyUserById(@Validated(SystemUserTb.Update.class) @RequestBody SystemUserTb args) { checkLevel(args); systemUserService.modifyUserById(args); - return new ResponseEntity<>(HttpStatus.NO_CONTENT); + return ResponseEntity.ok(null); } @ApiOperation("修改用户:个人中心") @@ -135,7 +134,7 @@ public class SystemUserController { throw new BadRequestException("不能修改他人资料"); } systemUserService.modifyUserCenterInfoById(args); - return new ResponseEntity<>(HttpStatus.NO_CONTENT); + return ResponseEntity.ok(null); } @ApiOperation("删除用户") @@ -150,7 +149,7 @@ public class SystemUserController { } } systemUserService.removeUserByIds(ids); - return new ResponseEntity<>(HttpStatus.OK); + return ResponseEntity.ok(null); } @ApiOperation("修改密码") @@ -166,7 +165,7 @@ public class SystemUserController { throw new BadRequestException("新密码不能与旧密码相同"); } systemUserService.modifyUserPasswordByUsername(user.getUsername(), passwordEncoder.encode(newPass)); - return new ResponseEntity<>(HttpStatus.OK); + return ResponseEntity.ok(null); } @ApiOperation("重置密码") @@ -174,13 +173,13 @@ public class SystemUserController { public ResponseEntity resetUserPasswordByIds(@RequestBody Set ids) { String defaultPwd = passwordEncoder.encode("123456"); systemUserService.resetUserPasswordByIds(ids, defaultPwd); - return new ResponseEntity<>(HttpStatus.OK); + return ResponseEntity.ok(null); } @ApiOperation("修改头像") @PostMapping(value = "/modifyUserAvatar") public ResponseEntity modifyUserAvatar(@RequestParam MultipartFile avatar) { - return new ResponseEntity<>(systemUserService.modifyUserAvatar(avatar), HttpStatus.OK); + return ResponseEntity.ok(systemUserService.modifyUserAvatar(avatar)); } @ApiOperation("修改邮箱") @@ -193,7 +192,7 @@ public class SystemUserController { } systemEmailService.checkEmailCaptcha(SystemCaptchaBizEnum.EMAIL_RESET_EMAIL_CODE, args.getEmail(), code); systemUserService.modifyUserEmailByUsername(user.getUsername(), args.getEmail()); - return new ResponseEntity<>(HttpStatus.OK); + return ResponseEntity.ok(null); } /** @@ -233,6 +232,6 @@ public class SystemUserController { ext.put("phone", m.getPhone()); return CsSelectOptionVo.builder().label(m.getNickName()).value(String.valueOf(m.getId())).ext(ext).build(); }).collect(Collectors.toList()); - return new ResponseEntity<>(collect, HttpStatus.OK); + return ResponseEntity.ok(collect); } } diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/dataobject/SystemRoleMenuTb.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/dataobject/SystemRoleMenuTb.java new file mode 100644 index 00000000..25a6287d --- /dev/null +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/dataobject/SystemRoleMenuTb.java @@ -0,0 +1,16 @@ +package cn.odboy.system.dal.dataobject; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; + +/** + * 角色菜单 + */ +@Getter +@Setter +@TableName("system_roles_menus") +public class SystemRoleMenuTb { + private Long menuId; + private Long roleId; +} 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 99cd60b9..c3b2ec8e 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 @@ -34,9 +34,7 @@ import java.util.Set; */ @Mapper public interface SystemDictDetailMapper extends BaseMapper { - IPage selectDictDetailByArgs( - @Param("criteria") SystemQueryDictDetailArgs criteria, - Page page); + IPage selectDictDetailByArgs(@Param("criteria") SystemQueryDictDetailArgs criteria, Page page); List selectDictDetailByArgs(@Param("criteria") SystemQueryDictDetailArgs criteria); 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 e49954b8..d6aeab32 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 @@ -31,7 +31,5 @@ import org.apache.ibatis.annotations.Param; */ @Mapper public interface SystemLocalStorageMapper extends BaseMapper { - IPage selectLocalStorageByArgs( - @Param("criteria") SystemQueryStorageArgs 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 4e6afec1..6cae722e 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 @@ -36,9 +36,7 @@ public interface SystemMenuMapper extends BaseMapper { List selectMenuByArgs(@Param("criteria") SystemQueryMenuArgs criteria); - LinkedHashSet selectMenuByRoleIdsAndType( - @Param("roleIds") Set roleIds, - @Param("type") Integer type); + LinkedHashSet selectMenuByRoleIdsAndType(@Param("roleIds") Set roleIds, @Param("type") Integer type); List selectMenuByPidIsNullOrderByMenuSort(); 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 5c5ee28c..511d8220 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 @@ -33,9 +33,7 @@ import java.util.List; */ @Mapper public interface SystemQuartzJobMapper extends BaseMapper { - IPage selectQuartzJobByArgs( - @Param("criteria") SystemQueryQuartzJobArgs 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 b651f0b1..10fb6ae2 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 @@ -31,7 +31,5 @@ import org.apache.ibatis.annotations.Param; */ @Mapper public interface SystemQuartzLogMapper extends BaseMapper { - IPage selectQuartzLogByArgs( - @Param("criteria") SystemQueryQuartzJobArgs 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/SystemRoleMenuMapper.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemRoleMenuMapper.java index 9f27cd05..9c25acae 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemRoleMenuMapper.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemRoleMenuMapper.java @@ -17,6 +17,8 @@ package cn.odboy.system.dal.mysql; import cn.odboy.system.dal.dataobject.SystemMenuTb; +import cn.odboy.system.dal.dataobject.SystemRoleMenuTb; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -28,12 +30,10 @@ import java.util.Set; * @author odboy */ @Mapper -public interface SystemRoleMenuMapper { +public interface SystemRoleMenuMapper extends BaseMapper { void batchInsertRoleMenu(@Param("menus") Set menus, @Param("roleId") Long roleId); void batchDeleteRoleMenu(@Param("roleIds") Set roleIds); void deleteRoleMenuByRoleId(@Param("roleId") Long roleId); - - void deleteRoleMenuByMenuId(@Param("menuId") Long menuId); } diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/operalog/OperationLogAspect.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/operalog/OperationLogAspect.java index 6d77e95d..83c4efa5 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/operalog/OperationLogAspect.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/operalog/OperationLogAspect.java @@ -84,10 +84,7 @@ public class OperationLogAspect { } } - private SystemOperationLogTb getOperationLogTb( - ProceedingJoinPoint joinPoint, - OperationLog annotation, - TimeInterval timeInterval) { + private SystemOperationLogTb getOperationLogTb(ProceedingJoinPoint joinPoint, OperationLog annotation, TimeInterval timeInterval) { long executeTime = timeInterval.intervalMs(); MethodSignature signature = (MethodSignature) joinPoint.getSignature(); String bizName = annotation.bizName(); 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 8b70a501..d028465d 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 @@ -35,11 +35,7 @@ public class AuthorityConfig { */ public Boolean check(String... permissions) { // 获取当前用户的所有权限 - List roleList = CsSecurityHelper.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/CsSecurityHelper.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/CsSecurityHelper.java index 02ac516f..c0cade4a 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/CsSecurityHelper.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/CsSecurityHelper.java @@ -122,8 +122,7 @@ public class CsSecurityHelper { * @return / */ public static String getToken() { - HttpServletRequest request = - ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest(); + HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest(); String bearerToken = request.getHeader(SystemConst.HEADER_NAME); if (bearerToken != null && bearerToken.startsWith(SystemConst.TOKEN_PREFIX)) { // 去掉令牌前缀 diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/JwtAccessDeniedHandler.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/JwtAccessDeniedHandler.java index 9a81e42c..0ca999a3 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/JwtAccessDeniedHandler.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/JwtAccessDeniedHandler.java @@ -31,16 +31,12 @@ import java.io.IOException; public class JwtAccessDeniedHandler implements AccessDeniedHandler { @Override - public void handle( - HttpServletRequest request, - HttpServletResponse response, - AccessDeniedException accessDeniedException) throws IOException { + public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException accessDeniedException) throws IOException { //当用户在没有授权的情况下访问受保护的REST资源时,将调用此方法发送403 Forbidden响应 response.setStatus(HttpStatus.FORBIDDEN.value()); response.setContentType("application/json;charset=UTF-8"); ObjectMapper objectMapper = new ObjectMapper(); - String jsonResponse = - objectMapper.writeValueAsString(ApiError.error(HttpStatus.FORBIDDEN.value(), "禁止访问,您没有权限访问此资源")); + String jsonResponse = objectMapper.writeValueAsString(ApiError.error(HttpStatus.FORBIDDEN.value(), "禁止访问,您没有权限访问此资源")); response.getWriter().write(jsonResponse); } } diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/JwtAuthenticationEntryPoint.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/JwtAuthenticationEntryPoint.java index 5b25b501..40509ec9 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/JwtAuthenticationEntryPoint.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/JwtAuthenticationEntryPoint.java @@ -33,15 +33,13 @@ import java.io.IOException; public class JwtAuthenticationEntryPoint implements AuthenticationEntryPoint { @Override - public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) - throws IOException { + public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException { // 当用户尝试访问安全的REST资源而不提供任何凭据时,将调用此方法发送401 响应 int code = HttpStatus.UNAUTHORIZED.value(); response.setStatus(code); response.setContentType("application/json;charset=UTF-8"); ObjectMapper objectMapper = new ObjectMapper(); - String jsonResponse = - objectMapper.writeValueAsString(ApiError.error(HttpStatus.UNAUTHORIZED.value(), "登录状态已过期,请重新登录")); + String jsonResponse = objectMapper.writeValueAsString(ApiError.error(HttpStatus.UNAUTHORIZED.value(), "登录状态已过期,请重新登录")); response.getWriter().write(jsonResponse); } } diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/TokenFilter.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/TokenFilter.java index 7bc8d900..bfce0304 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/TokenFilter.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/TokenFilter.java @@ -48,8 +48,7 @@ public class TokenFilter extends GenericFilterBean { } @Override - public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) - throws ServletException, IOException { + public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws ServletException, IOException { HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest; String token = resolveToken(httpServletRequest); // 对于 Token 为空的不需要去查 Redis 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 c797bbe6..451c34da 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 @@ -69,8 +69,7 @@ public class ExecutionJobBean extends QuartzJobBean { quartzLog.setCronExpression(quartzJob.getCronExpression()); try { // 执行任务 - QuartzRunnable task = - new QuartzRunnable(quartzJob.getBeanName(), quartzJob.getMethodName(), quartzJob.getParams()); + QuartzRunnable task = new QuartzRunnable(quartzJob.getBeanName(), quartzJob.getMethodName(), quartzJob.getParams()); Future future = executor.submit(task); // 忽略任务执行结果 future.get(); @@ -123,8 +122,7 @@ public class ExecutionJobBean extends QuartzJobBean { Map data = new HashMap<>(16); data.put("task", quartzJob); data.put("msg", msg); - TemplateEngine engine = - TemplateUtil.createEngine(new TemplateConfig("template", TemplateConfig.ResourceMode.CLASSPATH)); + TemplateEngine engine = TemplateUtil.createEngine(new TemplateConfig("template", TemplateConfig.ResourceMode.CLASSPATH)); Template template = engine.getTemplate("SystemQuartzJobTaskAlarmTemplate.ftl"); sendEmailRequest.setContent(template.render(data)); List emails = Arrays.asList(quartzJob.getEmail().split("[,,]")); diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/quartz/InitialActiveJobApplicationRunner.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/quartz/InitialActiveJobApplicationRunner.java deleted file mode 100644 index 8b3735a4..00000000 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/quartz/InitialActiveJobApplicationRunner.java +++ /dev/null @@ -1,32 +0,0 @@ -package cn.odboy.system.framework.quartz; - -import cn.odboy.system.dal.dataobject.SystemQuartzJobTb; -import cn.odboy.system.dal.mysql.SystemQuartzJobMapper; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.ApplicationArguments; -import org.springframework.boot.ApplicationRunner; -import org.springframework.stereotype.Component; - -import java.util.List; - -@Slf4j -@Component -public class InitialActiveJobApplicationRunner implements ApplicationRunner { - @Autowired - private SystemQuartzJobMapper quartzJobMapper; - @Autowired - private QuartzManage quartzManage; - - /** - * 项目启动时重新激活启用的定时任务 - * - * @param applicationArguments / - */ - @Override - public void run(ApplicationArguments applicationArguments) { - List quartzJobs = quartzJobMapper.selectAllEnableQuartzJob(); - quartzJobs.forEach(quartzManage::addJob); - log.info("Timing task injection complete"); - } -} 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 0868fe90..c7c75c11 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 @@ -38,12 +38,10 @@ public class QuartzManage { public void addJob(SystemQuartzJobTb quartzJob) { try { // 构建job信息 - JobDetail jobDetail = - JobBuilder.newJob(ExecutionJobBean.class).withIdentity(JOB_NAME + quartzJob.getId()).build(); + JobDetail jobDetail = JobBuilder.newJob(ExecutionJobBean.class).withIdentity(JOB_NAME + quartzJob.getId()).build(); // 通过触发器名和cron 表达式创建 Trigger - Trigger cronTrigger = TriggerBuilder.newTrigger().withIdentity(JOB_NAME + quartzJob.getId()).startNow() - .withSchedule(CronScheduleBuilder.cronSchedule(quartzJob.getCronExpression())).build(); + Trigger cronTrigger = TriggerBuilder.newTrigger().withIdentity(JOB_NAME + quartzJob.getId()).startNow().withSchedule(CronScheduleBuilder.cronSchedule(quartzJob.getCronExpression())).build(); cronTrigger.getJobDataMap().put(SystemQuartzJobTb.JOB_KEY, quartzJob); 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 index 6ed194ea..171a0667 100644 --- 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 @@ -35,10 +35,7 @@ public class OssStorageConfiguration { public MinioClient minioClient() { try { OSSConfigModel minio = properties.getOss().getMinio(); - return MinioClient.builder() - .endpoint(minio.getEndpoint()) - .credentials(minio.getAccessKey(), minio.getSecretKey()) - .build(); + 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-module-system/src/main/java/cn/odboy/system/framework/storage/local/MultipartConfig.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/storage/local/MultipartConfig.java index 41c25ef8..54338e14 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/storage/local/MultipartConfig.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/storage/local/MultipartConfig.java @@ -18,7 +18,6 @@ package cn.odboy.system.framework.storage.local; import cn.odboy.framework.exception.web.BadRequestException; import cn.odboy.framework.properties.AppProperties; -import cn.odboy.framework.server.core.CsFileLocalUploadHelper; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -36,8 +35,6 @@ public class MultipartConfig { @Value("${spring.application.name}") private String name; @Autowired - private CsFileLocalUploadHelper fileUploadPathHelper; - @Autowired private AppProperties properties; /** 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 index 2262b317..36f52b74 100644 --- 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 @@ -135,12 +135,7 @@ public class MinioRepository { * @param md5 文件md5 * @return String 上传后的文件名,上传失败返回 null */ - public SystemOssStorageTb upload( - File tempFile, - String originalFilename, - long fileSize, - String contentType, - String md5) { + public SystemOssStorageTb upload(File tempFile, String originalFilename, long fileSize, String contentType, String md5) { StorageOSSModel ossConfig = properties.getOss(); OSSConfigModel ossMinioConfig = ossConfig.getMinio(); String type = FileTypeUtil.getType(tempFile); @@ -168,13 +163,7 @@ public class MinioRepository { systemOssStorageTb.setObjectName(objectName); try (InputStream fileInputStream = CsFileUtil.getInputStream(tempFile)) { - PutObjectArgs objectArgs = - PutObjectArgs.builder() - .bucket(ossMinioConfig.getBucketName()) - .object(objectName) - .stream(fileInputStream, fileSize, -1) - .contentType(contentType) - .build(); + PutObjectArgs objectArgs = PutObjectArgs.builder().bucket(ossMinioConfig.getBucketName()).object(objectName).stream(fileInputStream, fileSize, -1).contentType(contentType).build(); minioClient.putObject(objectArgs); log.info("文件上传成功,并删除临时文件,文件名:{}", originalFilename); return systemOssStorageTb; @@ -212,13 +201,7 @@ public class MinioRepository { 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(); + 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); @@ -291,14 +274,9 @@ public class MinioRepository { return null; } try { - GetPresignedObjectUrlArgs presignedUrlArgs = - GetPresignedObjectUrlArgs.builder() - .bucket(properties.getOss().getMinio().getBucketName()) - .object(fullFileName) - .method(Method.GET) - // 设置 URL 过期时间为 7 天, 最大 7 天, 别挣扎了 - .expiry(3600 * 24 * 7) - .build(); + GetPresignedObjectUrlArgs presignedUrlArgs = GetPresignedObjectUrlArgs.builder().bucket(properties.getOss().getMinio().getBucketName()).object(fullFileName).method(Method.GET) + // 设置 URL 过期时间为 7 天, 最大 7 天, 别挣扎了 + .expiry(3600 * 24 * 7).build(); String url = minioClient.getPresignedObjectUrl(presignedUrlArgs); log.info("生成预签名 URL 成功,fileName: {}, url: {}", fullFileName, url); return url; @@ -315,11 +293,9 @@ public class MinioRepository { * @param res HTTP 响应 */ public void download(String fileName, HttpServletResponse res) { - GetObjectArgs objectArgs = - GetObjectArgs.builder().bucket(properties.getOss().getMinio().getBucketName()).object(fileName).build(); + GetObjectArgs objectArgs = GetObjectArgs.builder().bucket(properties.getOss().getMinio().getBucketName()).object(fileName).build(); - try (GetObjectResponse response = minioClient.getObject(objectArgs); - FastByteArrayOutputStream os = new FastByteArrayOutputStream()) { + try (GetObjectResponse response = minioClient.getObject(objectArgs); FastByteArrayOutputStream os = new FastByteArrayOutputStream()) { byte[] buf = new byte[1024]; int len; @@ -347,8 +323,7 @@ public class MinioRepository { * @param res HTTP 响应 */ public void downloadOptimizedVersion(String fileName, HttpServletResponse res) { - GetObjectArgs objectArgs = - GetObjectArgs.builder().bucket(properties.getOss().getMinio().getBucketName()).object(fileName).build(); + GetObjectArgs objectArgs = GetObjectArgs.builder().bucket(properties.getOss().getMinio().getBucketName()).object(fileName).build(); try (GetObjectResponse response = minioClient.getObject(objectArgs)) { // 增大缓冲区 @@ -382,9 +357,7 @@ public class MinioRepository { */ public List listObjects() { try { - Iterable> results = minioClient.listObjects(ListObjectsArgs.builder() - .bucket(properties.getOss().getMinio().getBucketName()) - .build()); + Iterable> results = minioClient.listObjects(ListObjectsArgs.builder().bucket(properties.getOss().getMinio().getBucketName()).build()); List items = new ArrayList<>(); for (Result result : results) { items.add(result.get()); @@ -404,10 +377,7 @@ public class MinioRepository { */ public boolean remove(String fileName) { try { - minioClient.removeObject(RemoveObjectArgs.builder() - .bucket(properties.getOss().getMinio().getBucketName()) - .object(fileName) - .build()); + minioClient.removeObject(RemoveObjectArgs.builder().bucket(properties.getOss().getMinio().getBucketName()).object(fileName).build()); log.info("删除文件成功,fileName: {}", fileName); return true; } catch (Exception e) { 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 7bf00252..bf9f7fc9 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 @@ -53,8 +53,6 @@ public class SystemEmailService { * 更新邮件配置 * * @param emailConfig 邮箱配置 - * @return / - * @throws Exception / */ @Transactional(rollbackFor = Exception.class) @@ -150,9 +148,9 @@ public class SystemEmailService { throw new BadRequestException("服务异常, 请联系网站负责人"); } // 存在就再次发送原来的验证码 - content = CsResourceTemplateUtil.render("system", biEnum.getTemplateName(), Dict.create().set("code", code)); + content = CsResourceTemplateUtil.render(null, biEnum.getTemplateName(), Dict.create().set("code", code)); } else { - content = CsResourceTemplateUtil.render("system", biEnum.getTemplateName(), Dict.create().set("code", oldCode)); + content = CsResourceTemplateUtil.render(null, biEnum.getTemplateName(), Dict.create().set("code", oldCode)); } SystemSendEmailArgs sendEmailRequest = new SystemSendEmailArgs(Collections.singletonList(email), applicationTitle, content); 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 5bbbf3f7..fea66c41 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 @@ -19,9 +19,11 @@ 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.context.CsSpringBeanHolder; import cn.odboy.framework.exception.web.BadRequestException; import cn.odboy.system.constant.TransferProtocolConst; import cn.odboy.system.dal.dataobject.SystemMenuTb; +import cn.odboy.system.dal.dataobject.SystemRoleMenuTb; import cn.odboy.system.dal.dataobject.SystemRoleTb; import cn.odboy.system.dal.model.SystemMenuMetaVo; import cn.odboy.system.dal.model.SystemMenuVo; @@ -31,6 +33,7 @@ import cn.odboy.system.dal.mysql.SystemRoleMenuMapper; import cn.odboy.util.CsClassUtil; import cn.odboy.util.CsFileUtil; import cn.odboy.util.CsStringUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -72,8 +75,7 @@ public class SystemMenuService { args.setPid(null); } if (args.getIFrame()) { - if (!(args.getPath().toLowerCase().startsWith(TransferProtocolConst.PREFIX_HTTP) || args.getPath().toLowerCase() - .startsWith(TransferProtocolConst.PREFIX_HTTPS))) { + if (!(args.getPath().toLowerCase().startsWith(TransferProtocolConst.PREFIX_HTTP) || args.getPath().toLowerCase().startsWith(TransferProtocolConst.PREFIX_HTTPS))) { throw new BadRequestException(TransferProtocolConst.PREFIX_HTTPS_BAD_REQUEST); } } @@ -97,8 +99,7 @@ public class SystemMenuService { } SystemMenuTb menu = systemMenuMapper.selectById(args.getId()); if (args.getIFrame()) { - if (!(args.getPath().toLowerCase().startsWith(TransferProtocolConst.PREFIX_HTTP) || args.getPath().toLowerCase() - .startsWith(TransferProtocolConst.PREFIX_HTTPS))) { + if (!(args.getPath().toLowerCase().startsWith(TransferProtocolConst.PREFIX_HTTP) || args.getPath().toLowerCase().startsWith(TransferProtocolConst.PREFIX_HTTPS))) { throw new BadRequestException(TransferProtocolConst.PREFIX_HTTPS_BAD_REQUEST); } } @@ -145,19 +146,30 @@ public class SystemMenuService { /** * 删除 - * - * @param menuSet / */ - @Transactional(rollbackFor = Exception.class) - public void removeMenuByIds(Set menuSet) { + public void removeMenuByIds(Set ids) { + Set menuSet = new HashSet<>(); + for (Long id : ids) { + List menuList = this.queryMenuByPid(id); + menuSet.add(systemMenuMapper.selectById(id)); + menuSet = this.queryChildMenu(menuList, menuSet); + } + List menuIds = menuSet.stream().map(SystemMenuTb::getId).filter(Objects::nonNull).distinct().collect(Collectors.toList()); + if (CollUtil.isNotEmpty(menuIds)) { + CsSpringBeanHolder.getBean(SystemMenuService.class).removeRoleMenuByMenuIds(menuIds); + systemMenuMapper.deleteByIds(menuIds); + } for (SystemMenuTb menu : menuSet) { - systemRoleMenuMapper.deleteRoleMenuByMenuId(menu.getId()); - systemMenuMapper.deleteById(menu.getId()); this.updateMenuSubCnt(menu.getPid()); } } + @Transactional(rollbackFor = Exception.class) + public void removeRoleMenuByMenuIds(List menuIds) { + systemRoleMenuMapper.delete(new LambdaQueryWrapper().in(SystemRoleMenuTb::getMenuId, menuIds)); + } + /** * 导出 * @@ -220,17 +232,6 @@ public class SystemMenuService { return systemMenuMapper.selectMenuByArgs(criteria); } - /** - * 根据ID查询 - * - * @param id / - * @return / - */ - - public SystemMenuTb getMenuById(long id) { - return systemMenuMapper.selectById(id); - } - /** * 根据当前用户获取菜单 * @@ -294,7 +295,7 @@ public class SystemMenuService { return menus; } menus.addAll(systemMenuMapper.selectMenuByPidOrderByMenuSort(menu.getPid())); - return querySuperiorMenuList(getMenuById(menu.getPid()), menus); + return querySuperiorMenuList(systemMenuMapper.selectById(menu.getPid()), menus); } /** @@ -396,4 +397,8 @@ public class SystemMenuService { } return menuVo1; } + + public List queryMenuByIds(List ids) { + return systemMenuMapper.selectByIds(ids); + } } diff --git a/cutejava/cutejava-module-system/src/main/resources/mapper/SystemRoleMenuMapper.xml b/cutejava/cutejava-module-system/src/main/resources/mapper/SystemRoleMenuMapper.xml index 6933de39..03d10c49 100644 --- a/cutejava/cutejava-module-system/src/main/resources/mapper/SystemRoleMenuMapper.xml +++ b/cutejava/cutejava-module-system/src/main/resources/mapper/SystemRoleMenuMapper.xml @@ -20,9 +20,4 @@ from system_roles_menus where role_id = #{roleId} - - delete - from system_roles_menus - where menu_id = #{menuId} - \ No newline at end of file diff --git a/cutejava/cutejava-module-system/src/main/resources/template/system/SystemEmailCaptchaTemplate.ftl b/cutejava/cutejava-module-system/src/main/resources/template/system/SystemEmailCaptchaTemplate.ftl deleted file mode 100644 index 32341749..00000000 --- a/cutejava/cutejava-module-system/src/main/resources/template/system/SystemEmailCaptchaTemplate.ftl +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - -
-
-

尊敬的用户, 您好:

-

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

-

${code}

-
-
-
- Copyright ©${.now?string("yyyy")} CuteJava - 后台管理系统 All Rights Reserved. -
- -
-
- - diff --git a/cutejava/cutejava-module-system/src/main/resources/template/system/SystemQuartzJobTaskAlarmTemplate.ftl b/cutejava/cutejava-module-system/src/main/resources/template/system/SystemQuartzJobTaskAlarmTemplate.ftl deleted file mode 100644 index ec164367..00000000 --- a/cutejava/cutejava-module-system/src/main/resources/template/system/SystemQuartzJobTaskAlarmTemplate.ftl +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - - -
-
-

任务信息:

- - - - - - - - - - - - - - - - - -
任务名称Bean名称执行方法参数内容Cron表达式描述内容
${task.jobName}${task.beanName}${task.methodName}${(task.params)!""}${task.cronExpression}${(task.description)!""}
-
-
-

异常信息:

-
-                ${msg}
-            
-
-
-
-
- Copyright ©${.now?string("yyyy")} CuteJava - 后台管理系统 All Rights Reserved. -
- -
- - - diff --git a/cutejava/cutejava-starter/src/main/java/cn/odboy/GenCode.java b/cutejava/cutejava-starter/src/main/java/cn/odboy/GenCode.java index 705bed88..4228b41d 100644 --- a/cutejava/cutejava-starter/src/main/java/cn/odboy/GenCode.java +++ b/cutejava/cutejava-starter/src/main/java/cn/odboy/GenCode.java @@ -37,13 +37,15 @@ public class GenCode { generator.setDriverClassName("com.mysql.cj.jdbc.Driver"); generator.setDatabaseUsername(DATABASE_USER); generator.setDatabasePassword(DATABASE_PWD); - genCode(generator); + genTaskCode(generator); } - private static void genCode(CsMpCmdGenUtil generator) { + private static void genTaskCode(CsMpCmdGenUtil generator) { generator.gen("task", "", List.of( "task_instance_info", - "task_instance_detail" + "task_instance_detail", + "task_template_info", + "task_instance_step_detail" )); } } diff --git a/cutejava/cutejava-starter/src/main/resources/application-dev.yml b/cutejava/cutejava-starter/src/main/resources/application-dev.yml index 783c9769..3a924d91 100644 --- a/cutejava/cutejava-starter/src/main/resources/application-dev.yml +++ b/cutejava/cutejava-starter/src/main/resources/application-dev.yml @@ -127,6 +127,34 @@ spring: max-idle: 20 # 连接池中的最小空闲连接数 min-idle: 1 + # 数据库一定不能区分大小写 + quartz: + # 必需,指定使用 JDBC 存储 + job-store-type: jdbc + properties: + org: + quartz: + scheduler: + # 必需,指定调度器实例的名称 + instanceName: cutejava + # 必需,指定调度器实例的 ID + instanceId: auto + threadPool: + # 可选,线程池的线程数量,可以根据需要调整 + threadCount: 5 + jobStore: + # 可选,如果你不需要集群,可以去掉 + isClustered: true + # 可选,集群检查间隔时间,可以根据需要调整 + clusterCheckinInterval: 10000 + # 必需,指定 JDBC 驱动代理类 + driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate + # 可选,是否使用属性存储,可以根据需要调整 + useProperties: false + # 必需,指定表的前缀 + tablePrefix: qrtz_ + # 可选,指定误触发阈值,可以根据需要调整 + misfireThreshold: 60000 # 集成mybatis-plus mybatis-plus: configuration: diff --git a/cutejava/cutejava-starter/src/main/resources/application-prod.yml b/cutejava/cutejava-starter/src/main/resources/application-prod.yml index 61770d42..3a924d91 100644 --- a/cutejava/cutejava-starter/src/main/resources/application-prod.yml +++ b/cutejava/cutejava-starter/src/main/resources/application-prod.yml @@ -53,8 +53,8 @@ spring: druid: db-type: com.alibaba.druid.pool.DruidDataSource # sql监控 - # driverClassName: com.p6spy.engine.spy.P6SpyDriver - # url: jdbc:p6spy:mysql://192.168.100.128:23306/cutejava?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true + # driverClassName: com.p6spy.engine.spy.P6SpyDriver + # url: jdbc:p6spy:mysql://192.168.100.128:23306/cutejava?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true driverClassName: com.mysql.cj.jdbc.Driver url: jdbc:mysql://192.168.100.128:23306/cutejava?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true username: root @@ -127,6 +127,34 @@ spring: max-idle: 20 # 连接池中的最小空闲连接数 min-idle: 1 + # 数据库一定不能区分大小写 + quartz: + # 必需,指定使用 JDBC 存储 + job-store-type: jdbc + properties: + org: + quartz: + scheduler: + # 必需,指定调度器实例的名称 + instanceName: cutejava + # 必需,指定调度器实例的 ID + instanceId: auto + threadPool: + # 可选,线程池的线程数量,可以根据需要调整 + threadCount: 5 + jobStore: + # 可选,如果你不需要集群,可以去掉 + isClustered: true + # 可选,集群检查间隔时间,可以根据需要调整 + clusterCheckinInterval: 10000 + # 必需,指定 JDBC 驱动代理类 + driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate + # 可选,是否使用属性存储,可以根据需要调整 + useProperties: false + # 必需,指定表的前缀 + tablePrefix: qrtz_ + # 可选,指定误触发阈值,可以根据需要调整 + misfireThreshold: 60000 # 集成mybatis-plus mybatis-plus: configuration: @@ -176,7 +204,7 @@ app: # 登录 login: # 是否限制单用户登录 - single: true + single: false # 验证码 captchaSetting: # 验证码类型配置 查看 LoginProperties 类 @@ -195,7 +223,7 @@ app: font-size: 25 # 是否开启 swagger-ui swagger: - enabled: false + enabled: true # 针对@Async async-task-pool: # 核心线程池大小 diff --git a/cutejava/cutejava-starter/src/main/resources/application-quartz.yml b/cutejava/cutejava-starter/src/main/resources/application-quartz.yml deleted file mode 100644 index 49b70447..00000000 --- a/cutejava/cutejava-starter/src/main/resources/application-quartz.yml +++ /dev/null @@ -1,42 +0,0 @@ -# 配置 quartz 分布式支持, sql 文件在 sql 目录下,需要导入到数据库,并且需要修改 application.yml 文件的 active: dev 配置 -spring: - # Quartz集群, 数据库表名称一定要不区分大小写! - quartz: - # 必需,指定使用 JDBC 存储 - job-store-type: jdbc - properties: - org: - quartz: - scheduler: - # 必需,指定调度器实例的名称 - instanceName: ClusteredScheduler - # 必需,指定调度器实例的 ID - instanceId: AUTO - threadPool: - class: org.quartz.simpl.SimpleThreadPool - # 可选,线程池的线程数量,可以根据需要调整 - threadCount: 10 - threadsInheritContextClassLoaderOfInitializingThread: true - dataSource: - jobStoreDataSource: - driver: com.mysql.cj.jdbc.Driver - url: jdbc:p6spy:mysql://127.0.0.1:3306/cutejava?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true - user: root - password: kd123456 - maxConnections: 10 - validationQuery: select 1 - jobStore: - # 可选,如果你不需要集群,可以去掉 - isClustered: true - # 可选,集群检查间隔时间,可以根据需要调整 - clusterCheckinInterval: 10000 - # class: org.quartz.impl.jdbcjobstore.JobStoreTX - # 必需,指定 JDBC 驱动代理类 - driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate - # 可选,是否使用属性存储,可以根据需要调整 - useProperties: false - # 必需,指定表的前缀 - tablePrefix: QRTZ_ - # 可选,指定误触发阈值,可以根据需要调整 - misfireThreshold: 60000 - dataSource: jobStoreDataSource diff --git a/cutejava/cutejava-starter/src/main/resources/application.yml b/cutejava/cutejava-starter/src/main/resources/application.yml index ff7e6944..09d83de6 100644 --- a/cutejava/cutejava-starter/src/main/resources/application.yml +++ b/cutejava/cutejava-starter/src/main/resources/application.yml @@ -1,5 +1,5 @@ spring: profiles: - # 激活的环境,如果需要 quartz 分布式支持,需要修改 active: dev,quartz + # 激活的环境 active: dev diff --git a/cutejava/docs/dockerenv/mysql8/mysql/my.cnf b/cutejava/docs/dockerenv/mysql8/mysql/my.cnf index 9b732405..24b63765 100644 --- a/cutejava/docs/dockerenv/mysql8/mysql/my.cnf +++ b/cutejava/docs/dockerenv/mysql8/mysql/my.cnf @@ -12,6 +12,8 @@ max_connect_errors=100 # 最大错误连接数 #sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION +lower_case_table_names=1 # 表名不区分大小写 + [mysql] default-character-set=utf8mb4