From d6688a367dc8dee7c489790daa5389de08e0531a Mon Sep 17 00:00:00 2001 From: 疯狂的狮子Li <15040126243@163.com> Date: 星期二, 09 七月 2024 10:42:40 +0800 Subject: [PATCH] !562 ♥️发布 5.2.1 正式版本 Merge pull request !562 from 疯狂的狮子Li/dev --- ruoyi-extend/ruoyi-snailjob-server/Dockerfile | 8 ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/interceptor/PlusDataPermissionInterceptor.java | 70 ++++ ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java | 2 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDictTypeServiceImpl.java | 2 .run/ruoyi-server.run.xml | 2 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysClientServiceImpl.java | 2 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOperLogServiceImpl.java | 2 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/DeleteSequenceMultiInstanceCmd.java | 3 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssConfigServiceImpl.java | 2 ruoyi-common/ruoyi-common-doc/src/main/java/org/dromara/common/doc/handler/OpenApiHandler.java | 3 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysNoticeServiceImpl.java | 2 ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/helper/DataBaseHelper.java | 5 ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/annotation/DataPermission.java | 7 .run/ruoyi-monitor-admin.run.xml | 2 ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/enums/DataScopeType.java | 37 + script/sql/postgres/flowable.sql | 73 ---- ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/utils/QueueUtils.java | 7 .run/ruoyi-snailjob-server.run.xml | 2 ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java | 26 + ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java | 2 ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml | 4 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDataScopeServiceImpl.java | 18 ruoyi-admin/Dockerfile | 10 script/docker/nginx/conf/nginx.conf | 2 ruoyi-extend/ruoyi-snailjob-server/src/main/resources/application-prod.yml | 2 README.md | 4 ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/domain/BaseEntity.java | 1 ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml | 33 - ruoyi-admin/src/main/resources/application-prod.yml | 8 ruoyi-extend/ruoyi-monitor-admin/Dockerfile | 6 ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/impl/TestTreeServiceImpl.java | 2 ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/enums/DataBaseType.java | 11 ruoyi-admin/src/main/resources/application-dev.yml | 6 ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/page/TableDataInfo.java | 10 ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/StreamUtils.java | 29 + ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/handler/InjectionMetaObjectHandler.java | 30 + ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessInstanceServiceImpl.java | 29 ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/helper/DataPermissionHelper.java | 22 + ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantPackageServiceImpl.java | 2 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfFormManageServiceImpl.java | 2 ruoyi-admin/src/main/java/org/dromara/web/service/impl/SocialAuthStrategy.java | 3 ruoyi-common/ruoyi-common-bom/pom.xml | 2 ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/serviceImpl.java.vm | 2 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java | 14 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfCategoryServiceImpl.java | 2 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysLogininforServiceImpl.java | 2 pom.xml | 2 ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/mapper/BaseMapperPlus.java | 162 +++++++++ ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/config/UndertowConfig.java | 6 ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/handler/PlusDataPermissionHandler.java | 55 +++ ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysPostServiceImpl.java | 2 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/TestLeaveServiceImpl.java | 2 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfTaskBackNodeServiceImpl.java | 5 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfNodeConfigServiceImpl.java | 2 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysMenuMapper.java | 7 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysMenuServiceImpl.java | 12 ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/annotation/DataColumn.java | 13 ruoyi-common/ruoyi-common-websocket/src/main/java/org/dromara/common/websocket/interceptor/PlusWebSocketInterceptor.java | 35 + ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/service/GenTableServiceImpl.java | 4 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantServiceImpl.java | 2 ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/utils/LoginHelper.java | 24 + script/docker/docker-compose.yml | 10 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java | 4 ruoyi-common/ruoyi-common-mybatis/src/main/resources/spy.properties | 2 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysDeptController.java | 4 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java | 18 ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/mapper/TestDemoMapper.java | 2 ruoyi-extend/ruoyi-snailjob-server/src/main/resources/application-dev.yml | 2 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysDeptService.java | 8 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfDefinitionConfigServiceImpl.java | 2 ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/impl/TestDemoServiceImpl.java | 2 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysConfigServiceImpl.java | 2 ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/page/PageQuery.java | 6 ruoyi-admin/src/main/java/org/dromara/web/service/impl/PasswordAuthStrategy.java | 3 ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/handler/MybatisExceptionHandler.java | 5 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysRoleServiceImpl.java | 15 ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/queue/DelayedQueueController.java | 9 77 files changed, 606 insertions(+), 336 deletions(-) diff --git a/.run/ruoyi-monitor-admin.run.xml b/.run/ruoyi-monitor-admin.run.xml index 095b3d7..5b32519 100644 --- a/.run/ruoyi-monitor-admin.run.xml +++ b/.run/ruoyi-monitor-admin.run.xml @@ -2,7 +2,7 @@ <configuration default="false" name="ruoyi-monitor-admin" type="docker-deploy" factoryName="dockerfile" server-name="Docker"> <deployment type="dockerfile"> <settings> - <option name="imageTag" value="ruoyi/ruoyi-monitor-admin:5.2.0" /> + <option name="imageTag" value="ruoyi/ruoyi-monitor-admin:5.2.1" /> <option name="buildOnly" value="true" /> <option name="sourceFilePath" value="ruoyi-extend/ruoyi-monitor-admin/Dockerfile" /> </settings> diff --git a/.run/ruoyi-server.run.xml b/.run/ruoyi-server.run.xml index 0463c34..9fefae6 100644 --- a/.run/ruoyi-server.run.xml +++ b/.run/ruoyi-server.run.xml @@ -2,7 +2,7 @@ <configuration default="false" name="ruoyi-server" type="docker-deploy" factoryName="dockerfile" server-name="Docker"> <deployment type="dockerfile"> <settings> - <option name="imageTag" value="ruoyi/ruoyi-server:5.2.0" /> + <option name="imageTag" value="ruoyi/ruoyi-server:5.2.1" /> <option name="buildOnly" value="true" /> <option name="sourceFilePath" value="ruoyi-admin/Dockerfile" /> </settings> diff --git a/.run/ruoyi-snailjob-server.run.xml b/.run/ruoyi-snailjob-server.run.xml index 761915e..914809d 100644 --- a/.run/ruoyi-snailjob-server.run.xml +++ b/.run/ruoyi-snailjob-server.run.xml @@ -2,7 +2,7 @@ <configuration default="false" name="ruoyi-snailjob-server" type="docker-deploy" factoryName="dockerfile" server-name="Docker"> <deployment type="dockerfile"> <settings> - <option name="imageTag" value="ruoyi/ruoyi-snailjob-server:5.2.0" /> + <option name="imageTag" value="ruoyi/ruoyi-snailjob-server:5.2.1" /> <option name="buildOnly" value="true" /> <option name="sourceFilePath" value="ruoyi-extend/ruoyi-snailjob-server/Dockerfile" /> </settings> diff --git a/README.md b/README.md index 7ac5448..ad9c2ce 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ [](https://gitee.com/dromara/RuoYi-Vue-Plus/blob/master/LICENSE) [ <br> -[](https://gitee.com/dromara/RuoYi-Vue-Plus) +[](https://gitee.com/dromara/RuoYi-Vue-Plus) []() []() []() @@ -56,7 +56,7 @@ | 鏁版嵁鍔犺В瀵� | 閲囩敤 娉ㄨВ + mybatis 鎷︽埅鍣� 瀵瑰瓨鍙栨暟鎹湡闂磋嚜鍔ㄥ姞瑙e瘑<br/>鏀寔澶氱绛栫暐 濡侭ASE64銆丄ES銆丷SA銆丼M2銆丼M4绛� | 鏃� | | 鎺ュ彛浼犺緭鍔犲瘑 | 閲囩敤 鍔ㄦ�� AES + RSA 鍔犲瘑璇锋眰 body 姣忎竴娆¤姹傜閽ラ兘涓嶅悓澶у箙搴﹂檷浣庡彲鐮磋В鎬� | 鏃� | | 鏁版嵁缈昏瘧 | 閲囩敤 娉ㄨВ + jackson 搴忓垪鍖栨湡闂村姩鎬佷慨鏀规暟鎹� 鏁版嵁杩涜缈昏瘧<br/>鏀寔澶氱妯″紡: `鏄犲皠缈昏瘧` `鐩存帴缈昏瘧` `鍏朵粬鎵╁睍鏉′欢缈昏瘧` 鎺ュ彛鍖栦袱姝ュ嵆鍙畬鎴愯嚜瀹氫箟鎵╁睍 鍐呯疆澶氱缈昏瘧瀹炵幇 | 鏃� | -| 澶氭暟鎹簮妗嗘灦 | 閲囩敤 dynamic-datasource 鏀寔涓栭潰澶ч儴鍒嗘暟鎹簱<br/>閫氳繃yml閰嶇疆鍗冲彲鍔ㄦ�佺鐞嗗紓鏋勪笉鍚岀绫荤殑鏁版嵁搴� 涔熷彲閫氳繃鍓嶇椤甸潰娣诲姞鏁版嵁婧�<br/>鏀寔spel琛ㄨ揪寮忎粠璇锋眰澶村弬鏁扮瓑鏉′欢鍒囨崲鏁版嵁婧� | 鍩轰簬 druid 鎵嬪姩缂栧啓浠g爜閰嶇疆鏁版嵁婧� 閰嶇疆绻佺悙 鏀寔鎬у樊 | +| 澶氭暟鎹簮妗嗘灦 | 閲囩敤 dynamic-datasource 鏀寔甯傞潰澶ч儴鍒嗘暟鎹簱<br/>閫氳繃yml閰嶇疆鍗冲彲鍔ㄦ�佺鐞嗗紓鏋勪笉鍚岀绫荤殑鏁版嵁搴� 涔熷彲閫氳繃鍓嶇椤甸潰娣诲姞鏁版嵁婧�<br/>鏀寔spel琛ㄨ揪寮忎粠璇锋眰澶村弬鏁扮瓑鏉′欢鍒囨崲鏁版嵁婧� | 鍩轰簬 druid 鎵嬪姩缂栧啓浠g爜閰嶇疆鏁版嵁婧� 閰嶇疆绻佺悙 鏀寔鎬у樊 | | 澶氭暟鎹簮浜嬪姟 | 閲囩敤 dynamic-datasource 鏀寔澶氭暟鎹簮涓嶅悓绉嶇被鐨勬暟鎹簱浜嬪姟鍥炴粴 | 涓嶆敮鎸� | | 鏁版嵁搴撹繛鎺ユ睜 | 閲囩敤 HikariCP Spring瀹樻柟鍐呯疆杩炴帴姹� 閰嶇疆绠�鍗� 浠ユ�ц兘涓庣ǔ瀹氭�ч椈鍚嶅ぉ涓� | 閲囩敤 druid bug浼楀 绀惧尯缁存姢宸� 娲昏穬搴︿綆 閰嶇疆浼楀绻佺悙鎬ц兘涓�鑸� | | 鏁版嵁搴撲富閿� | 閲囩敤 闆姳ID 鍩轰簬鏃堕棿鎴崇殑 鏈夊簭澧為暱 鍞竴ID 鍐嶄篃涓嶇敤涓哄垎搴撳垎琛� 鏁版嵁鍚堝苟涓婚敭鍐茬獊閲嶅鑰屽彂鎰� | 閲囩敤 鏁版嵁搴撹嚜澧濱D 鏀寔鏁版嵁閲忔湁闄� 涓嶆敮鎸佸鏁版嵁婧愪富閿敮涓� | diff --git a/pom.xml b/pom.xml index 900b61b..7094419 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ <description>RuoYi-Vue-Plus澶氱鎴风鐞嗙郴缁�</description> <properties> - <revision>5.2.0</revision> + <revision>5.2.1</revision> <spring-boot.version>3.2.6</spring-boot.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> diff --git a/ruoyi-admin/Dockerfile b/ruoyi-admin/Dockerfile index 609b04a..10dabc4 100644 --- a/ruoyi-admin/Dockerfile +++ b/ruoyi-admin/Dockerfile @@ -1,7 +1,9 @@ +# 璐濆皵瀹為獙瀹� Spring 瀹樻柟鎺ㄨ崘闀滃儚 JDK涓嬭浇鍦板潃 https://bell-sw.com/pages/downloads/ +FROM bellsoft/liberica-openjdk-alpine:17.0.11-cds +#FROM bellsoft/liberica-openjdk-alpine:21.0.3-cds #FROM findepi/graalvm:java17-native -FROM openjdk:17.0.2-oraclelinux8 -MAINTAINER Lion Li +LABEL maintainer="Lion Li" RUN mkdir -p /ruoyi/server/logs \ /ruoyi/server/temp \ @@ -9,6 +11,10 @@ WORKDIR /ruoyi/server +# 琛ュ叏alpine闀滃儚缂哄け瀛椾綋闂 +RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories +RUN apk add fontconfig && apk add --update ttf-dejavu && fc-cache --force + ENV SERVER_PORT=8080 LANG=C.UTF-8 LC_ALL=C.UTF-8 JAVA_OPTS="" EXPOSE ${SERVER_PORT} diff --git a/ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java b/ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java index d99af5b..1db68f1 100644 --- a/ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java +++ b/ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java @@ -1,6 +1,7 @@ package org.dromara.web.controller; import cn.dev33.satoken.annotation.SaIgnore; +import cn.dev33.satoken.exception.NotLoginException; import cn.hutool.core.codec.Base64; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; @@ -194,8 +195,26 @@ */ @GetMapping("/tenant/list") public R<LoginTenantVo> tenantList(HttpServletRequest request) throws Exception { + // 杩斿洖瀵硅薄 + LoginTenantVo result = new LoginTenantVo(); + boolean enable = TenantHelper.isEnable(); + result.setTenantEnabled(enable); + // 濡傛灉鏈紑鍚鎴疯繖鐩存帴杩斿洖 + if (!enable) { + return R.ok(result); + } + List<SysTenantVo> tenantList = tenantService.queryList(new SysTenantBo()); List<TenantListVo> voList = MapstructUtils.convert(tenantList, TenantListVo.class); + try { + // 濡傛灉鍙秴绠¤繑鍥炴墍鏈夌鎴� + if (LoginHelper.isSuperAdmin()) { + result.setVoList(voList); + return R.ok(result); + } + } catch (NotLoginException ignored) { + } + // 鑾峰彇鍩熷悕 String host; String referer = request.getHeader("referer"); @@ -208,11 +227,8 @@ // 鏍规嵁鍩熷悕杩涜绛涢�� List<TenantListVo> list = StreamUtils.filter(voList, vo -> StringUtils.equals(vo.getDomain(), host)); - // 杩斿洖瀵硅薄 - LoginTenantVo vo = new LoginTenantVo(); - vo.setVoList(CollUtil.isNotEmpty(list) ? list : voList); - vo.setTenantEnabled(TenantHelper.isEnable()); - return R.ok(vo); + result.setVoList(CollUtil.isNotEmpty(list) ? list : voList); + return R.ok(result); } } diff --git a/ruoyi-admin/src/main/java/org/dromara/web/service/impl/PasswordAuthStrategy.java b/ruoyi-admin/src/main/java/org/dromara/web/service/impl/PasswordAuthStrategy.java index cd33ea4..5d3ebd7 100644 --- a/ruoyi-admin/src/main/java/org/dromara/web/service/impl/PasswordAuthStrategy.java +++ b/ruoyi-admin/src/main/java/org/dromara/web/service/impl/PasswordAuthStrategy.java @@ -24,7 +24,6 @@ import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.tenant.helper.TenantHelper; import org.dromara.common.web.config.properties.CaptchaProperties; -import org.dromara.system.domain.SysClient; import org.dromara.system.domain.SysUser; import org.dromara.system.domain.vo.SysClientVo; import org.dromara.system.domain.vo.SysUserVo; @@ -95,7 +94,7 @@ * @param uuid 鍞竴鏍囪瘑 */ private void validateCaptcha(String tenantId, String username, String code, String uuid) { - String verifyKey = GlobalConstants.CAPTCHA_CODE_KEY + StringUtils.defaultString(uuid, ""); + String verifyKey = GlobalConstants.CAPTCHA_CODE_KEY + StringUtils.blankToDefault(uuid, ""); String captcha = RedisUtils.getCacheObject(verifyKey); RedisUtils.deleteObject(verifyKey); if (captcha == null) { diff --git a/ruoyi-admin/src/main/java/org/dromara/web/service/impl/SocialAuthStrategy.java b/ruoyi-admin/src/main/java/org/dromara/web/service/impl/SocialAuthStrategy.java index 6694165..01db200 100644 --- a/ruoyi-admin/src/main/java/org/dromara/web/service/impl/SocialAuthStrategy.java +++ b/ruoyi-admin/src/main/java/org/dromara/web/service/impl/SocialAuthStrategy.java @@ -16,6 +16,7 @@ import org.dromara.common.core.enums.UserStatus; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.exception.user.UserException; +import org.dromara.common.core.utils.StreamUtils; import org.dromara.common.core.utils.ValidatorUtils; import org.dromara.common.json.utils.JsonUtils; import org.dromara.common.satoken.utils.LoginHelper; @@ -83,7 +84,7 @@ } SysSocialVo social; if (TenantHelper.isEnable()) { - Optional<SysSocialVo> opt = list.stream().filter(x -> x.getTenantId().equals(loginBody.getTenantId())).findAny(); + Optional<SysSocialVo> opt = StreamUtils.findAny(list, x -> x.getTenantId().equals(loginBody.getTenantId())); if (opt.isEmpty()) { throw new ServiceException("瀵逛笉璧凤紝浣犳病鏈夋潈闄愮櫥褰曞綋鍓嶇鎴凤紒"); } diff --git a/ruoyi-admin/src/main/resources/application-dev.yml b/ruoyi-admin/src/main/resources/application-dev.yml index e24b265..ea5cafa 100644 --- a/ruoyi-admin/src/main/resources/application-dev.yml +++ b/ruoyi-admin/src/main/resources/application-dev.yml @@ -17,7 +17,7 @@ token: "SJ_cKqBTPzCsWA3VyuCfFoccmuIEGXjr5KT" server: host: 127.0.0.1 - port: 1788 + port: 17888 # 璇﹁ script/sql/snail_job.sql `sj_namespace` 琛� namespace: ${spring.profiles.active} # 闅忎富搴旂敤绔彛椋橀�� @@ -96,8 +96,8 @@ port: 6379 # 鏁版嵁搴撶储寮� database: 0 - # 瀵嗙爜(濡傛病鏈夊瘑鐮佽娉ㄩ噴鎺�) - # password: + # redis 瀵嗙爜蹇呴』閰嶇疆 + password: ruoyi123 # 杩炴帴瓒呮椂鏃堕棿 timeout: 10s # 鏄惁寮�鍚痵sl diff --git a/ruoyi-admin/src/main/resources/application-prod.yml b/ruoyi-admin/src/main/resources/application-prod.yml index 0192d59..2a4bc11 100644 --- a/ruoyi-admin/src/main/resources/application-prod.yml +++ b/ruoyi-admin/src/main/resources/application-prod.yml @@ -13,14 +13,14 @@ --- # snail-job 閰嶇疆 snail-job: - enabled: false + enabled: true # 闇�瑕佸湪 SnailJob 鍚庡彴缁勭鐞嗗垱寤哄搴斿悕绉扮殑缁�,鐒跺悗鍒涘缓浠诲姟鐨勬椂鍊欓�夋嫨瀵瑰簲鐨勭粍,鎵嶈兘姝g‘鍒嗘淳浠诲姟 group: "ruoyi_group" # SnailJob 鎺ュ叆楠岃瘉浠ょ墝 璇﹁ script/sql/snail_job.sql `sj_group_config` 琛� token: "SJ_cKqBTPzCsWA3VyuCfFoccmuIEGXjr5KT" server: host: 127.0.0.1 - port: 1788 + port: 17888 # 璇﹁ script/sql/snail_job.sql `sj_namespace` 琛� namespace: ${spring.profiles.active} # 闅忎富搴旂敤绔彛椋橀�� @@ -99,8 +99,8 @@ port: 6379 # 鏁版嵁搴撶储寮� database: 0 - # 瀵嗙爜(濡傛病鏈夊瘑鐮佽娉ㄩ噴鎺�) - # password: + # redis 瀵嗙爜蹇呴』閰嶇疆 + password: ruoyi123 # 杩炴帴瓒呮椂鏃堕棿 timeout: 10s # 鏄惁寮�鍚痵sl diff --git a/ruoyi-common/ruoyi-common-bom/pom.xml b/ruoyi-common/ruoyi-common-bom/pom.xml index d546275..5388d8c 100644 --- a/ruoyi-common/ruoyi-common-bom/pom.xml +++ b/ruoyi-common/ruoyi-common-bom/pom.xml @@ -14,7 +14,7 @@ </description> <properties> - <revision>5.2.0</revision> + <revision>5.2.1</revision> </properties> <dependencyManagement> diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/StreamUtils.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/StreamUtils.java index 967612e..1342deb 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/StreamUtils.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/StreamUtils.java @@ -7,6 +7,7 @@ import java.util.*; import java.util.function.BiFunction; +import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Predicate; import java.util.stream.Collectors; @@ -35,6 +36,34 @@ } /** + * 鎵惧埌娴佷腑婊¤冻鏉′欢鐨勭涓�涓厓绱� + * + * @param collection 闇�瑕佹煡璇㈢殑闆嗗悎 + * @param function 杩囨护鏂规硶 + * @return 鎵惧埌绗﹀悎鏉′欢鐨勭涓�涓厓绱狅紝娌℃湁鍒欒繑鍥瀗ull + */ + public static <E> E findFirst(Collection<E> collection, Predicate<E> function) { + if (CollUtil.isEmpty(collection)) { + return null; + } + return collection.stream().filter(function).findFirst().orElse(null); + } + + /** + * 鎵惧埌娴佷腑浠绘剰涓�涓弧瓒虫潯浠剁殑鍏冪礌 + * + * @param collection 闇�瑕佹煡璇㈢殑闆嗗悎 + * @param function 杩囨护鏂规硶 + * @return 鎵惧埌绗﹀悎鏉′欢鐨勪换鎰忎竴涓厓绱狅紝娌℃湁鍒欒繑鍥瀗ull + */ + public static <E> Optional<E> findAny(Collection<E> collection, Predicate<E> function) { + if (CollUtil.isEmpty(collection)) { + return Optional.empty(); + } + return collection.stream().filter(function).findAny(); + } + + /** * 灏哻ollection鎷兼帴 * * @param collection 闇�瑕佽浆鍖栫殑闆嗗悎 diff --git a/ruoyi-common/ruoyi-common-doc/src/main/java/org/dromara/common/doc/handler/OpenApiHandler.java b/ruoyi-common/ruoyi-common-doc/src/main/java/org/dromara/common/doc/handler/OpenApiHandler.java index a35cc64..56b7369 100644 --- a/ruoyi-common/ruoyi-common-doc/src/main/java/org/dromara/common/doc/handler/OpenApiHandler.java +++ b/ruoyi-common/ruoyi-common-doc/src/main/java/org/dromara/common/doc/handler/OpenApiHandler.java @@ -11,6 +11,7 @@ import io.swagger.v3.oas.models.tags.Tag; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.dromara.common.core.utils.StreamUtils; import org.springdoc.core.customizers.OpenApiBuilderCustomizer; import org.springdoc.core.customizers.ServerBaseUrlCustomizer; import org.springdoc.core.properties.SpringDocConfigProperties; @@ -230,7 +231,7 @@ .flatMap(x -> Stream.of(x.value())).collect(Collectors.toSet()); methodTags.addAll(AnnotatedElementUtils.findAllMergedAnnotations(method, io.swagger.v3.oas.annotations.tags.Tag.class)); if (!CollectionUtils.isEmpty(methodTags)) { - tagsStr.addAll(methodTags.stream().map(tag -> propertyResolverUtils.resolve(tag.name(), locale)).collect(Collectors.toSet())); + tagsStr.addAll(StreamUtils.toSet(methodTags, tag -> propertyResolverUtils.resolve(tag.name(), locale))); List<io.swagger.v3.oas.annotations.tags.Tag> allTags = new ArrayList<>(methodTags); addTags(allTags, tags, locale); } diff --git a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/annotation/DataColumn.java b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/annotation/DataColumn.java index aca470f..f8c5cd0 100644 --- a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/annotation/DataColumn.java +++ b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/annotation/DataColumn.java @@ -3,9 +3,10 @@ import java.lang.annotation.*; /** - * 鏁版嵁鏉冮檺 - * + * 鏁版嵁鏉冮檺娉ㄨВ锛岀敤浜庢爣璁版暟鎹潈闄愮殑鍗犱綅绗﹀叧閿瓧鍜屾浛鎹㈠�� + * <p> * 涓�涓敞瑙e彧鑳藉搴斾竴涓ā鏉� + * </p> * * @author Lion Li * @version 3.5.0 @@ -16,12 +17,16 @@ public @interface DataColumn { /** - * 鍗犱綅绗﹀叧閿瓧 + * 鏁版嵁鏉冮檺妯℃澘鐨勫崰浣嶇鍏抽敭瀛楋紝榛樿涓� "deptName" + * + * @return 鍗犱綅绗﹀叧閿瓧鏁扮粍 */ String[] key() default "deptName"; /** - * 鍗犱綅绗︽浛鎹㈠�� + * 鏁版嵁鏉冮檺妯℃澘鐨勫崰浣嶇鏇挎崲鍊硷紝榛樿涓� "dept_id" + * + * @return 鍗犱綅绗︽浛鎹㈠�兼暟缁� */ String[] value() default "dept_id"; diff --git a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/annotation/DataPermission.java b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/annotation/DataPermission.java index f4351e3..6fd3c3e 100644 --- a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/annotation/DataPermission.java +++ b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/annotation/DataPermission.java @@ -3,7 +3,7 @@ import java.lang.annotation.*; /** - * 鏁版嵁鏉冮檺缁� + * 鏁版嵁鏉冮檺缁勬敞瑙o紝鐢ㄤ簬鏍囪鏁版嵁鏉冮檺閰嶇疆鏁扮粍 * * @author Lion Li * @version 3.5.0 @@ -13,6 +13,11 @@ @Documented public @interface DataPermission { + /** + * 鏁版嵁鏉冮檺閰嶇疆鏁扮粍锛岀敤浜庢寚瀹氭暟鎹潈闄愮殑鍗犱綅绗﹀叧閿瓧鍜屾浛鎹㈠�� + * + * @return 鏁版嵁鏉冮檺閰嶇疆鏁扮粍 + */ DataColumn[] value(); } diff --git a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/domain/BaseEntity.java b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/domain/BaseEntity.java index 820b49a..13a7941 100644 --- a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/domain/BaseEntity.java +++ b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/domain/BaseEntity.java @@ -17,7 +17,6 @@ * * @author Lion Li */ - @Data public class BaseEntity implements Serializable { diff --git a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/mapper/BaseMapperPlus.java b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/mapper/BaseMapperPlus.java index 3889250..956be9f 100644 --- a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/mapper/BaseMapperPlus.java +++ b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/mapper/BaseMapperPlus.java @@ -12,6 +12,7 @@ import org.apache.ibatis.logging.Log; import org.apache.ibatis.logging.LogFactory; import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StreamUtils; import java.io.Serializable; import java.util.Collection; @@ -34,20 +35,38 @@ Log log = LogFactory.getLog(BaseMapperPlus.class); + /** + * 鑾峰彇褰撳墠瀹炰緥瀵硅薄鍏宠仈鐨勬硾鍨嬬被鍨� V 鐨� Class 瀵硅薄 + * + * @return 杩斿洖褰撳墠瀹炰緥瀵硅薄鍏宠仈鐨勬硾鍨嬬被鍨� V 鐨� Class 瀵硅薄 + */ default Class<V> currentVoClass() { return (Class<V>) GenericTypeUtils.resolveTypeArguments(this.getClass(), BaseMapperPlus.class)[1]; } + /** + * 鑾峰彇褰撳墠瀹炰緥瀵硅薄鍏宠仈鐨勬硾鍨嬬被鍨� T 鐨� Class 瀵硅薄 + * + * @return 杩斿洖褰撳墠瀹炰緥瀵硅薄鍏宠仈鐨勬硾鍨嬬被鍨� T 鐨� Class 瀵硅薄 + */ default Class<T> currentModelClass() { return (Class<T>) GenericTypeUtils.resolveTypeArguments(this.getClass(), BaseMapperPlus.class)[0]; } + /** + * 浣跨敤榛樿鐨勬煡璇㈡潯浠舵煡璇㈠苟杩斿洖缁撴灉鍒楄〃 + * + * @return 杩斿洖鏌ヨ缁撴灉鐨勫垪琛� + */ default List<T> selectList() { return this.selectList(new QueryWrapper<>()); } /** - * 鎵归噺鎻掑叆 + * 鎵归噺鎻掑叆瀹炰綋瀵硅薄闆嗗悎 + * + * @param entityList 瀹炰綋瀵硅薄闆嗗悎 + * @return 鎻掑叆鎿嶄綔鏄惁鎴愬姛鐨勫竷灏斿�� */ default boolean insertBatch(Collection<T> entityList) { Db.saveBatch(entityList); @@ -56,7 +75,10 @@ } /** - * 鎵归噺鏇存柊 + * 鎵归噺鏍规嵁ID鏇存柊瀹炰綋瀵硅薄闆嗗悎 + * + * @param entityList 瀹炰綋瀵硅薄闆嗗悎 + * @return 鏇存柊鎿嶄綔鏄惁鎴愬姛鐨勫竷灏斿�� */ default boolean updateBatchById(Collection<T> entityList) { Db.updateBatchById(entityList); @@ -65,7 +87,10 @@ } /** - * 鎵归噺鎻掑叆鎴栨洿鏂� + * 鎵归噺鎻掑叆鎴栨洿鏂板疄浣撳璞¢泦鍚� + * + * @param entityList 瀹炰綋瀵硅薄闆嗗悎 + * @return 鎻掑叆鎴栨洿鏂版搷浣滄槸鍚︽垚鍔熺殑甯冨皵鍊� */ default boolean insertOrUpdateBatch(Collection<T> entityList) { Db.saveOrUpdateBatch(entityList); @@ -74,7 +99,11 @@ } /** - * 鎵归噺鎻掑叆(鍖呭惈闄愬埗鏉℃暟) + * 鎵归噺鎻掑叆瀹炰綋瀵硅薄闆嗗悎骞舵寚瀹氭壒澶勭悊澶у皬 + * + * @param entityList 瀹炰綋瀵硅薄闆嗗悎 + * @param batchSize 鎵瑰鐞嗗ぇ灏� + * @return 鎻掑叆鎿嶄綔鏄惁鎴愬姛鐨勫竷灏斿�� */ default boolean insertBatch(Collection<T> entityList, int batchSize) { Db.saveBatch(entityList, batchSize); @@ -83,7 +112,11 @@ } /** - * 鎵归噺鏇存柊(鍖呭惈闄愬埗鏉℃暟) + * 鎵归噺鏍规嵁ID鏇存柊瀹炰綋瀵硅薄闆嗗悎骞舵寚瀹氭壒澶勭悊澶у皬 + * + * @param entityList 瀹炰綋瀵硅薄闆嗗悎 + * @param batchSize 鎵瑰鐞嗗ぇ灏� + * @return 鏇存柊鎿嶄綔鏄惁鎴愬姛鐨勫竷灏斿�� */ default boolean updateBatchById(Collection<T> entityList, int batchSize) { Db.updateBatchById(entityList, batchSize); @@ -92,7 +125,11 @@ } /** - * 鎵归噺鎻掑叆鎴栨洿鏂�(鍖呭惈闄愬埗鏉℃暟) + * 鎵归噺鎻掑叆鎴栨洿鏂板疄浣撳璞¢泦鍚堝苟鎸囧畾鎵瑰鐞嗗ぇ灏� + * + * @param entityList 瀹炰綋瀵硅薄闆嗗悎 + * @param batchSize 鎵瑰鐞嗗ぇ灏� + * @return 鎻掑叆鎴栨洿鏂版搷浣滄槸鍚︽垚鍔熺殑甯冨皵鍊� */ default boolean insertOrUpdateBatch(Collection<T> entityList, int batchSize) { Db.saveOrUpdateBatch(entityList, batchSize); @@ -100,12 +137,23 @@ return true; } + /** + * 鏍规嵁ID鏌ヨ鍗曚釜VO瀵硅薄 + * + * @param id 涓婚敭ID + * @return 鏌ヨ鍒扮殑鍗曚釜VO瀵硅薄 + */ default V selectVoById(Serializable id) { return selectVoById(id, this.currentVoClass()); } /** - * 鏍规嵁 ID 鏌ヨ + * 鏍规嵁ID鏌ヨ鍗曚釜VO瀵硅薄骞跺皢鍏惰浆鎹负鎸囧畾鐨刅O绫� + * + * @param id 涓婚敭ID + * @param voClass 瑕佽浆鎹㈢殑VO绫荤殑Class瀵硅薄 + * @param <C> VO绫荤殑绫诲瀷 + * @return 鏌ヨ鍒扮殑鍗曚釜VO瀵硅薄锛岀粡杩囪浆鎹负鎸囧畾鐨刅O绫诲悗杩斿洖 */ default <C> C selectVoById(Serializable id, Class<C> voClass) { T obj = this.selectById(id); @@ -115,12 +163,23 @@ return MapstructUtils.convert(obj, voClass); } + /** + * 鏍规嵁ID闆嗗悎鎵归噺鏌ヨVO瀵硅薄鍒楄〃 + * + * @param idList 涓婚敭ID闆嗗悎 + * @return 鏌ヨ鍒扮殑VO瀵硅薄鍒楄〃 + */ default List<V> selectVoBatchIds(Collection<? extends Serializable> idList) { return selectVoBatchIds(idList, this.currentVoClass()); } /** - * 鏌ヨ锛堟牴鎹甀D 鎵归噺鏌ヨ锛� + * 鏍规嵁ID闆嗗悎鎵归噺鏌ヨ瀹炰綋瀵硅薄鍒楄〃锛屽苟灏嗗叾杞崲涓烘寚瀹氱殑VO瀵硅薄鍒楄〃 + * + * @param idList 涓婚敭ID闆嗗悎 + * @param voClass 瑕佽浆鎹㈢殑VO绫荤殑Class瀵硅薄 + * @param <C> VO绫荤殑绫诲瀷 + * @return 鏌ヨ鍒扮殑VO瀵硅薄鍒楄〃锛岀粡杩囪浆鎹负鎸囧畾鐨刅O绫诲悗杩斿洖 */ default <C> List<C> selectVoBatchIds(Collection<? extends Serializable> idList, Class<C> voClass) { List<T> list = this.selectBatchIds(idList); @@ -130,12 +189,23 @@ return MapstructUtils.convert(list, voClass); } + /** + * 鏍规嵁鏌ヨ鏉′欢Map鏌ヨVO瀵硅薄鍒楄〃 + * + * @param map 鏌ヨ鏉′欢Map + * @return 鏌ヨ鍒扮殑VO瀵硅薄鍒楄〃 + */ default List<V> selectVoByMap(Map<String, Object> map) { return selectVoByMap(map, this.currentVoClass()); } /** - * 鏌ヨ锛堟牴鎹� columnMap 鏉′欢锛� + * 鏍规嵁鏌ヨ鏉′欢Map鏌ヨ瀹炰綋瀵硅薄鍒楄〃锛屽苟灏嗗叾杞崲涓烘寚瀹氱殑VO瀵硅薄鍒楄〃 + * + * @param map 鏌ヨ鏉′欢Map + * @param voClass 瑕佽浆鎹㈢殑VO绫荤殑Class瀵硅薄 + * @param <C> VO绫荤殑绫诲瀷 + * @return 鏌ヨ鍒扮殑VO瀵硅薄鍒楄〃锛岀粡杩囪浆鎹负鎸囧畾鐨刅O绫诲悗杩斿洖 */ default <C> List<C> selectVoByMap(Map<String, Object> map, Class<C> voClass) { List<T> list = this.selectByMap(map); @@ -145,23 +215,47 @@ return MapstructUtils.convert(list, voClass); } + /** + * 鏍规嵁鏉′欢鏌ヨ鍗曚釜VO瀵硅薄 + * + * @param wrapper 鏌ヨ鏉′欢Wrapper + * @return 鏌ヨ鍒扮殑鍗曚釜VO瀵硅薄 + */ default V selectVoOne(Wrapper<T> wrapper) { return selectVoOne(wrapper, this.currentVoClass()); } + /** + * 鏍规嵁鏉′欢鏌ヨ鍗曚釜VO瀵硅薄锛屽苟鏍规嵁闇�瑕佸喅瀹氭槸鍚︽姏鍑哄紓甯� + * + * @param wrapper 鏌ヨ鏉′欢Wrapper + * @param throwEx 鏄惁鎶涘嚭寮傚父鐨勬爣蹇� + * @return 鏌ヨ鍒扮殑鍗曚釜VO瀵硅薄 + */ default V selectVoOne(Wrapper<T> wrapper, boolean throwEx) { return selectVoOne(wrapper, this.currentVoClass(), throwEx); } /** - * 鏍规嵁 entity 鏉′欢锛屾煡璇竴鏉¤褰� + * 鏍规嵁鏉′欢鏌ヨ鍗曚釜VO瀵硅薄锛屽苟鎸囧畾杩斿洖鐨刅O瀵硅薄鐨勭被鍨� + * + * @param wrapper 鏌ヨ鏉′欢Wrapper + * @param voClass 杩斿洖鐨刅O瀵硅薄鐨凜lass瀵硅薄 + * @param <C> 杩斿洖鐨刅O瀵硅薄鐨勭被鍨� + * @return 鏌ヨ鍒扮殑鍗曚釜VO瀵硅薄锛岀粡杩囩被鍨嬭浆鎹负鎸囧畾鐨刅O绫诲悗杩斿洖 */ default <C> C selectVoOne(Wrapper<T> wrapper, Class<C> voClass) { return selectVoOne(wrapper, voClass, true); } /** - * 鏍规嵁 entity 鏉′欢锛屾煡璇竴鏉¤褰� + * 鏍规嵁鏉′欢鏌ヨ鍗曚釜瀹炰綋瀵硅薄锛屽苟灏嗗叾杞崲涓烘寚瀹氱殑VO瀵硅薄 + * + * @param wrapper 鏌ヨ鏉′欢Wrapper + * @param voClass 瑕佽浆鎹㈢殑VO绫荤殑Class瀵硅薄 + * @param throwEx 鏄惁鎶涘嚭寮傚父鐨勬爣蹇� + * @param <C> VO绫荤殑绫诲瀷 + * @return 鏌ヨ鍒扮殑鍗曚釜VO瀵硅薄锛岀粡杩囪浆鎹负鎸囧畾鐨刅O绫诲悗杩斿洖 */ default <C> C selectVoOne(Wrapper<T> wrapper, Class<C> voClass, boolean throwEx) { T obj = this.selectOne(wrapper, throwEx); @@ -171,16 +265,32 @@ return MapstructUtils.convert(obj, voClass); } + /** + * 鏌ヨ鎵�鏈塚O瀵硅薄鍒楄〃 + * + * @return 鏌ヨ鍒扮殑VO瀵硅薄鍒楄〃 + */ default List<V> selectVoList() { return selectVoList(new QueryWrapper<>(), this.currentVoClass()); } + /** + * 鏍规嵁鏉′欢鏌ヨVO瀵硅薄鍒楄〃 + * + * @param wrapper 鏌ヨ鏉′欢Wrapper + * @return 鏌ヨ鍒扮殑VO瀵硅薄鍒楄〃 + */ default List<V> selectVoList(Wrapper<T> wrapper) { return selectVoList(wrapper, this.currentVoClass()); } /** - * 鏍规嵁 entity 鏉′欢锛屾煡璇㈠叏閮ㄨ褰� + * 鏍规嵁鏉′欢鏌ヨ瀹炰綋瀵硅薄鍒楄〃锛屽苟灏嗗叾杞崲涓烘寚瀹氱殑VO瀵硅薄鍒楄〃 + * + * @param wrapper 鏌ヨ鏉′欢Wrapper + * @param voClass 瑕佽浆鎹㈢殑VO绫荤殑Class瀵硅薄 + * @param <C> VO绫荤殑绫诲瀷 + * @return 鏌ヨ鍒扮殑VO瀵硅薄鍒楄〃锛岀粡杩囪浆鎹负鎸囧畾鐨刅O绫诲悗杩斿洖 */ default <C> List<C> selectVoList(Wrapper<T> wrapper, Class<C> voClass) { List<T> list = this.selectList(wrapper); @@ -190,15 +300,31 @@ return MapstructUtils.convert(list, voClass); } + /** + * 鏍规嵁鏉′欢鍒嗛〉鏌ヨVO瀵硅薄鍒楄〃 + * + * @param page 鍒嗛〉淇℃伅 + * @param wrapper 鏌ヨ鏉′欢Wrapper + * @return 鏌ヨ鍒扮殑VO瀵硅薄鍒嗛〉鍒楄〃 + */ default <P extends IPage<V>> P selectVoPage(IPage<T> page, Wrapper<T> wrapper) { return selectVoPage(page, wrapper, this.currentVoClass()); } /** - * 鍒嗛〉鏌ヨVO + * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ瀹炰綋瀵硅薄鍒楄〃锛屽苟灏嗗叾杞崲涓烘寚瀹氱殑VO瀵硅薄鍒嗛〉鍒楄〃 + * + * @param page 鍒嗛〉淇℃伅 + * @param wrapper 鏌ヨ鏉′欢Wrapper + * @param voClass 瑕佽浆鎹㈢殑VO绫荤殑Class瀵硅薄 + * @param <C> VO绫荤殑绫诲瀷 + * @param <P> VO瀵硅薄鍒嗛〉鍒楄〃鐨勭被鍨� + * @return 鏌ヨ鍒扮殑VO瀵硅薄鍒嗛〉鍒楄〃锛岀粡杩囪浆鎹负鎸囧畾鐨刅O绫诲悗杩斿洖 */ default <C, P extends IPage<C>> P selectVoPage(IPage<T> page, Wrapper<T> wrapper, Class<C> voClass) { + // 鏍规嵁鏉′欢鍒嗛〉鏌ヨ瀹炰綋瀵硅薄鍒楄〃 List<T> list = this.selectList(page, wrapper); + // 鍒涘缓涓�涓柊鐨刅O瀵硅薄鍒嗛〉鍒楄〃锛屽苟璁剧疆鍒嗛〉淇℃伅 IPage<C> voPage = new Page<>(page.getCurrent(), page.getSize(), page.getTotal()); if (CollUtil.isEmpty(list)) { return (P) voPage; @@ -207,8 +333,16 @@ return (P) voPage; } + /** + * 鏍规嵁鏉′欢鏌ヨ绗﹀悎鏉′欢鐨勫璞★紝骞跺皢鍏惰浆鎹负鎸囧畾绫诲瀷鐨勫璞″垪琛� + * + * @param wrapper 鏌ヨ鏉′欢Wrapper + * @param mapper 杞崲鍑芥暟锛岀敤浜庡皢鏌ヨ鍒扮殑瀵硅薄杞崲涓烘寚瀹氱被鍨嬬殑瀵硅薄 + * @param <C> 瑕佽浆鎹㈢殑瀵硅薄鐨勭被鍨� + * @return 鏌ヨ鍒扮殑绗﹀悎鏉′欢鐨勫璞″垪琛紝缁忚繃杞崲涓烘寚瀹氱被鍨嬬殑瀵硅薄鍚庤繑鍥� + */ default <C> List<C> selectObjs(Wrapper<T> wrapper, Function<? super Object, C> mapper) { - return this.selectObjs(wrapper).stream().filter(Objects::nonNull).map(mapper).collect(Collectors.toList()); + return StreamUtils.toList(this.selectObjs(wrapper), mapper); } } diff --git a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/page/PageQuery.java b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/page/PageQuery.java index 40b7530..6ca9b27 100644 --- a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/page/PageQuery.java +++ b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/page/PageQuery.java @@ -4,10 +4,10 @@ import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.metadata.OrderItem; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.Data; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.sql.SqlUtil; -import lombok.Data; import java.io.Serial; import java.io.Serializable; @@ -19,7 +19,6 @@ * * @author Lion Li */ - @Data public class PageQuery implements Serializable { @@ -56,6 +55,9 @@ */ public static final int DEFAULT_PAGE_SIZE = Integer.MAX_VALUE; + /** + * 鏋勫缓鍒嗛〉瀵硅薄 + */ public <T> Page<T> build() { Integer pageNum = ObjectUtil.defaultIfNull(getPageNum(), DEFAULT_PAGE_NUM); Integer pageSize = ObjectUtil.defaultIfNull(getPageSize(), DEFAULT_PAGE_SIZE); diff --git a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/page/TableDataInfo.java b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/page/TableDataInfo.java index a4b6799..8ecfb54 100644 --- a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/page/TableDataInfo.java +++ b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/page/TableDataInfo.java @@ -14,7 +14,6 @@ * * @author Lion Li */ - @Data @NoArgsConstructor public class TableDataInfo<T> implements Serializable { @@ -53,6 +52,9 @@ this.total = total; } + /** + * 鏍规嵁鍒嗛〉瀵硅薄鏋勫缓琛ㄦ牸鍒嗛〉鏁版嵁瀵硅薄 + */ public static <T> TableDataInfo<T> build(IPage<T> page) { TableDataInfo<T> rspData = new TableDataInfo<>(); rspData.setCode(HttpStatus.HTTP_OK); @@ -62,6 +64,9 @@ return rspData; } + /** + * 鏍规嵁鏁版嵁鍒楄〃鏋勫缓琛ㄦ牸鍒嗛〉鏁版嵁瀵硅薄 + */ public static <T> TableDataInfo<T> build(List<T> list) { TableDataInfo<T> rspData = new TableDataInfo<>(); rspData.setCode(HttpStatus.HTTP_OK); @@ -71,6 +76,9 @@ return rspData; } + /** + * 鏋勫缓琛ㄦ牸鍒嗛〉鏁版嵁瀵硅薄 + */ public static <T> TableDataInfo<T> build() { TableDataInfo<T> rspData = new TableDataInfo<>(); rspData.setCode(HttpStatus.HTTP_OK); diff --git a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/enums/DataBaseType.java b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/enums/DataBaseType.java index 93487e9..5084424 100644 --- a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/enums/DataBaseType.java +++ b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/enums/DataBaseType.java @@ -1,8 +1,8 @@ package org.dromara.common.mybatis.enums; -import org.dromara.common.core.utils.StringUtils; import lombok.AllArgsConstructor; import lombok.Getter; +import org.dromara.common.core.utils.StringUtils; /** * 鏁版嵁搴撶被鍨� @@ -33,8 +33,17 @@ */ SQL_SERVER("Microsoft SQL Server"); + /** + * 鏁版嵁搴撶被鍨� + */ private final String type; + /** + * 鏍规嵁鏁版嵁搴撲骇鍝佸悕绉版煡鎵惧搴旂殑鏁版嵁搴撶被鍨� + * + * @param databaseProductName 鏁版嵁搴撲骇鍝佸悕绉� + * @return 瀵瑰簲鐨勬暟鎹簱绫诲瀷鏋氫妇鍊硷紝濡傛灉鏈壘鍒板垯杩斿洖 null + */ public static DataBaseType find(String databaseProductName) { if (StringUtils.isBlank(databaseProductName)) { return null; diff --git a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/enums/DataScopeType.java b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/enums/DataScopeType.java index 9ea66b0..455cecb 100644 --- a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/enums/DataScopeType.java +++ b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/enums/DataScopeType.java @@ -1,19 +1,22 @@ package org.dromara.common.mybatis.enums; -import org.dromara.common.core.utils.StringUtils; import lombok.AllArgsConstructor; import lombok.Getter; +import org.dromara.common.core.domain.model.LoginUser; +import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.helper.DataPermissionHelper; /** - * 鏁版嵁鏉冮檺绫诲瀷 + * 鏁版嵁鏉冮檺绫诲瀷鏋氫妇 * <p> - * 璇硶鏀寔 spel 妯℃澘琛ㄨ揪寮� - * <p> - * 鍐呯疆鏁版嵁 user 褰撳墠鐢ㄦ埛 鍐呭鍙傝�� LoginUser - * 濡傞渶鎵╁睍鏁版嵁 鍙娇鐢� {@link DataPermissionHelper} 鎿嶄綔 - * 鍐呯疆鏈嶅姟 sdss 绯荤粺鏁版嵁鏉冮檺鏈嶅姟 鍐呭鍙傝�� SysDataScopeService - * 濡傞渶鎵╁睍鏇村鑷畾涔夋湇鍔� 鍙互鍙傝�� sdss 鑷缂栧啓 + * 鏀寔浣跨敤 SpEL 妯℃澘琛ㄨ揪寮忓畾涔� SQL 鏌ヨ鏉′欢 + * 鍐呯疆鏁版嵁锛� + * - {@code user}: 褰撳墠鐧诲綍鐢ㄦ埛淇℃伅锛屽弬鑰� {@link LoginUser} + * 鍐呯疆鏈嶅姟锛� + * - {@code sdss}: 绯荤粺鏁版嵁鏉冮檺鏈嶅姟锛屽弬鑰� {@link ISysDataScopeService} + * 濡傞渶鎵╁睍鏁版嵁锛屽彲浠ラ�氳繃 {@link DataPermissionHelper} 杩涜鎿嶄綔 + * 濡傞渶鎵╁睍鏈嶅姟锛屽彲浠ラ�氳繃 {@link ISysDataScopeService} 鑷缂栧啓 + * </p> * * @author Lion Li * @version 3.5.0 @@ -29,36 +32,50 @@ /** * 鑷畾鏁版嵁鏉冮檺 + * 浣跨敤 SpEL 琛ㄨ揪寮忥細`#{#deptName} IN ( #{@sdss.getRoleCustom( #user.roleId )} )` + * 濡傛灉涓嶆弧瓒虫潯浠讹紝鍒欎娇鐢ㄩ粯璁� SQL 琛ㄨ揪寮忥細`1 = 0` */ CUSTOM("2", " #{#deptName} IN ( #{@sdss.getRoleCustom( #user.roleId )} ) ", " 1 = 0 "), /** * 閮ㄩ棬鏁版嵁鏉冮檺 + * 浣跨敤 SpEL 琛ㄨ揪寮忥細`#{#deptName} = #{#user.deptId}` + * 濡傛灉涓嶆弧瓒虫潯浠讹紝鍒欎娇鐢ㄩ粯璁� SQL 琛ㄨ揪寮忥細`1 = 0` */ DEPT("3", " #{#deptName} = #{#user.deptId} ", " 1 = 0 "), /** * 閮ㄩ棬鍙婁互涓嬫暟鎹潈闄� + * 浣跨敤 SpEL 琛ㄨ揪寮忥細`#{#deptName} IN ( #{@sdss.getDeptAndChild( #user.deptId )}` + * 濡傛灉涓嶆弧瓒虫潯浠讹紝鍒欎娇鐢ㄩ粯璁� SQL 琛ㄨ揪寮忥細`1 = 0` */ DEPT_AND_CHILD("4", " #{#deptName} IN ( #{@sdss.getDeptAndChild( #user.deptId )} )", " 1 = 0 "), /** * 浠呮湰浜烘暟鎹潈闄� + * 浣跨敤 SpEL 琛ㄨ揪寮忥細`#{#userName} = #{#user.userId}` + * 濡傛灉涓嶆弧瓒虫潯浠讹紝鍒欎娇鐢ㄩ粯璁� SQL 琛ㄨ揪寮忥細`1 = 0` */ SELF("5", " #{#userName} = #{#user.userId} ", " 1 = 0 "); private final String code; /** - * 璇硶 閲囩敤 spel 妯℃澘琛ㄨ揪寮� + * SpEL 妯℃澘琛ㄨ揪寮忥紝鐢ㄤ簬鏋勫缓 SQL 鏌ヨ鏉′欢 */ private final String sqlTemplate; /** - * 涓嶆弧瓒� sqlTemplate 鍒欏~鍏� + * 濡傛灉涓嶆弧瓒� {@code sqlTemplate} 鐨勬潯浠讹紝鍒欎娇鐢ㄦ榛樿 SQL 琛ㄨ揪寮� */ private final String elseSql; + /** + * 鏍规嵁鏋氫妇浠g爜鏌ユ壘瀵瑰簲鐨勬灇涓惧�� + * + * @param code 鏋氫妇浠g爜 + * @return 瀵瑰簲鐨勬灇涓惧�硷紝濡傛灉鏈壘鍒板垯杩斿洖 null + */ public static DataScopeType findCode(String code) { if (StringUtils.isBlank(code)) { return null; diff --git a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/handler/InjectionMetaObjectHandler.java b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/handler/InjectionMetaObjectHandler.java index a66908f..99e6b38 100644 --- a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/handler/InjectionMetaObjectHandler.java +++ b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/handler/InjectionMetaObjectHandler.java @@ -3,12 +3,12 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpStatus; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; +import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.reflection.MetaObject; import org.dromara.common.core.domain.model.LoginUser; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.mybatis.core.domain.BaseEntity; import org.dromara.common.satoken.utils.LoginHelper; -import lombok.extern.slf4j.Slf4j; -import org.apache.ibatis.reflection.MetaObject; import java.util.Date; @@ -21,21 +21,28 @@ @Slf4j public class InjectionMetaObjectHandler implements MetaObjectHandler { + /** + * 鎻掑叆濉厖鏂规硶锛岀敤浜庡湪鎻掑叆鏁版嵁鏃惰嚜鍔ㄥ~鍏呭疄浣撳璞′腑鐨勫垱寤烘椂闂淬�佹洿鏂版椂闂淬�佸垱寤轰汉銆佹洿鏂颁汉绛変俊鎭� + * + * @param metaObject 鍏冨璞★紝鐢ㄤ簬鑾峰彇鍘熷瀵硅薄骞惰繘琛屽~鍏� + */ @Override public void insertFill(MetaObject metaObject) { try { if (ObjectUtil.isNotNull(metaObject) && metaObject.getOriginalObject() instanceof BaseEntity baseEntity) { + // 鑾峰彇褰撳墠鏃堕棿浣滀负鍒涘缓鏃堕棿鍜屾洿鏂版椂闂达紝濡傛灉鍒涘缓鏃堕棿涓嶄负绌猴紝鍒欎娇鐢ㄥ垱寤烘椂闂达紝鍚﹀垯浣跨敤褰撳墠鏃堕棿 Date current = ObjectUtil.isNotNull(baseEntity.getCreateTime()) ? baseEntity.getCreateTime() : new Date(); baseEntity.setCreateTime(current); baseEntity.setUpdateTime(current); + + // 濡傛灉鍒涘缓浜轰负绌猴紝鍒欏~鍏呭綋鍓嶇櫥褰曠敤鎴风殑淇℃伅 if (ObjectUtil.isNull(baseEntity.getCreateBy())) { LoginUser loginUser = getLoginUser(); if (ObjectUtil.isNotNull(loginUser)) { Long userId = loginUser.getUserId(); - // 褰撳墠宸茬櫥褰� 涓� 鍒涘缓浜轰负绌� 鍒欏~鍏� + // 濉厖鍒涘缓浜恒�佹洿鏂颁汉鍜屽垱寤洪儴闂ㄤ俊鎭� baseEntity.setCreateBy(userId); - // 褰撳墠宸茬櫥褰� 涓� 鏇存柊浜轰负绌� 鍒欏~鍏� baseEntity.setUpdateBy(userId); baseEntity.setCreateDept(ObjectUtil.isNotNull(baseEntity.getCreateDept()) ? baseEntity.getCreateDept() : loginUser.getDeptId()); @@ -47,19 +54,24 @@ } } + /** + * 鏇存柊濉厖鏂规硶锛岀敤浜庡湪鏇存柊鏁版嵁鏃惰嚜鍔ㄥ~鍏呭疄浣撳璞′腑鐨勬洿鏂版椂闂村拰鏇存柊浜轰俊鎭� + * + * @param metaObject 鍏冨璞★紝鐢ㄤ簬鑾峰彇鍘熷瀵硅薄骞惰繘琛屽~鍏� + */ @Override public void updateFill(MetaObject metaObject) { try { if (ObjectUtil.isNotNull(metaObject) && metaObject.getOriginalObject() instanceof BaseEntity baseEntity) { + // 鑾峰彇褰撳墠鏃堕棿浣滀负鏇存柊鏃堕棿锛屾棤璁哄師濮嬪璞′腑鐨勬洿鏂版椂闂存槸鍚︿负绌洪兘濉厖 Date current = new Date(); - // 鏇存柊鏃堕棿濉厖(涓嶇涓轰笉涓虹┖) baseEntity.setUpdateTime(current); - // 褰撳墠宸茬櫥褰� 鏇存柊浜哄~鍏�(涓嶇涓轰笉涓虹┖) + + // 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛鐨処D锛屽苟濉厖鏇存柊浜轰俊鎭� Long userId = LoginHelper.getUserId(); if (ObjectUtil.isNotNull(userId)) { baseEntity.setUpdateBy(userId); } - } } catch (Exception e) { throw new ServiceException("鑷姩娉ㄥ叆寮傚父 => " + e.getMessage(), HttpStatus.HTTP_UNAUTHORIZED); @@ -67,7 +79,9 @@ } /** - * 鑾峰彇鐧诲綍鐢ㄦ埛鍚� + * 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛淇℃伅 + * + * @return 褰撳墠鐧诲綍鐢ㄦ埛鐨勪俊鎭紝濡傛灉鐢ㄦ埛鏈櫥褰曞垯杩斿洖 null */ private LoginUser getLoginUser() { LoginUser loginUser; diff --git a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/handler/MybatisExceptionHandler.java b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/handler/MybatisExceptionHandler.java index ec3ee0d..518d52d 100644 --- a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/handler/MybatisExceptionHandler.java +++ b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/handler/MybatisExceptionHandler.java @@ -1,14 +1,13 @@ package org.dromara.common.mybatis.handler; -import org.dromara.common.core.domain.R; +import jakarta.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; +import org.dromara.common.core.domain.R; import org.dromara.common.core.utils.StringUtils; import org.mybatis.spring.MyBatisSystemException; import org.springframework.dao.DuplicateKeyException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; - -import jakarta.servlet.http.HttpServletRequest; /** * Mybatis寮傚父澶勭悊鍣� diff --git a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/handler/PlusDataPermissionHandler.java b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/handler/PlusDataPermissionHandler.java index 7d7fd84..74279bd 100644 --- a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/handler/PlusDataPermissionHandler.java +++ b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/handler/PlusDataPermissionHandler.java @@ -68,13 +68,27 @@ */ private final BeanResolver beanResolver = new BeanFactoryResolver(SpringUtils.getBeanFactory()); + /** + * 鏋勯�犳柟娉曪紝鎵弿鎸囧畾鍖呬笅鐨� Mapper 绫诲苟鍒濆鍖栫紦瀛� + * + * @param mapperPackage Mapper 绫绘墍鍦ㄧ殑鍖呰矾寰� + */ public PlusDataPermissionHandler(String mapperPackage) { scanMapperClasses(mapperPackage); } - + /** + * 鑾峰彇鏁版嵁杩囨护鏉′欢鐨� SQL 鐗囨 + * + * @param where 鍘熷鐨勬煡璇㈡潯浠惰〃杈惧紡 + * @param mappedStatementId Mapper 鏂规硶鐨� ID + * @param isSelect 鏄惁涓烘煡璇㈣鍙� + * @return 鏁版嵁杩囨护鏉′欢鐨� SQL 鐗囨 + */ public Expression getSqlSegment(Expression where, String mappedStatementId, boolean isSelect) { + // 鑾峰彇鏁版嵁鏉冮檺閰嶇疆 DataPermission dataPermission = getDataPermission(mappedStatementId); + // 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛淇℃伅 LoginUser currentUser = DataPermissionHelper.getVariable("user"); if (ObjectUtil.isNull(currentUser)) { currentUser = LoginHelper.getLoginUser(); @@ -84,6 +98,7 @@ if (LoginHelper.isSuperAdmin() || LoginHelper.isTenantAdmin()) { return where; } + // 鏋勯�犳暟鎹繃婊ゆ潯浠剁殑 SQL 鐗囨 String dataFilterSql = buildDataFilter(dataPermission.value(), isSelect); if (StringUtils.isBlank(dataFilterSql)) { return where; @@ -103,7 +118,12 @@ } /** - * 鏋勯�犳暟鎹繃婊ql + * 鏋勫缓鏁版嵁杩囨护鏉′欢鐨� SQL 璇彞 + * + * @param dataColumns 鏁版嵁鏉冮檺娉ㄨВ涓殑鍒椾俊鎭� + * @param isSelect 鏍囧織褰撳墠鎿嶄綔鏄惁涓烘煡璇㈡搷浣滐紝鏌ヨ鎿嶄綔鍜屾洿鏂版垨鍒犻櫎鎿嶄綔鍦ㄥ鐞嗚繃婊ゆ潯浠舵椂浼氭湁涓嶅悓鐨勫鐞嗘柟寮� + * @return 鏋勫缓鐨勬暟鎹繃婊ゆ潯浠剁殑 SQL 璇彞 + * @throws ServiceException 濡傛灉瑙掕壊鐨勬暟鎹寖鍥村紓甯告垨鑰� key 涓� value 鐨勯暱搴︿笉鍖归厤锛屽垯鎶涘嚭 ServiceException 寮傚父 */ private String buildDataFilter(DataColumn[] dataColumns, boolean isSelect) { // 鏇存柊鎴栧垹闄ら渶婊¤冻鎵�鏈夋潯浠� @@ -159,20 +179,29 @@ } /** - * 閫氳繃 mapperPackage 璁剧疆鐨勬壂鎻忓寘 鎵弿缂撳瓨鏈夋敞瑙g殑鏂规硶涓庣被 + * 鎵弿鎸囧畾鍖呬笅鐨� Mapper 绫伙紝骞舵煡鎵惧叾涓甫鏈夌壒瀹氭敞瑙g殑鏂规硶鎴栫被 + * + * @param mapperPackage Mapper 绫绘墍鍦ㄧ殑鍖呰矾寰� */ private void scanMapperClasses(String mapperPackage) { + // 鍒涘缓璧勬簮瑙f瀽鍣ㄥ拰鍏冩暟鎹鍙栧伐鍘� PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); CachingMetadataReaderFactory factory = new CachingMetadataReaderFactory(); + // 灏� Mapper 鍖呰矾寰勬寜鍒嗛殧绗︽媶鍒嗕负鏁扮粍 String[] packagePatternArray = StringUtils.splitPreserveAllTokens(mapperPackage, ConfigurableApplicationContext.CONFIG_LOCATION_DELIMITERS); String classpath = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX; try { for (String packagePattern : packagePatternArray) { + // 灏嗗寘璺緞杞崲涓鸿祫婧愯矾寰� String path = ClassUtils.convertClassNameToResourcePath(packagePattern); + // 鑾峰彇鎸囧畾璺緞涓嬬殑鎵�鏈� .class 鏂囦欢璧勬簮 Resource[] resources = resolver.getResources(classpath + path + "/*.class"); for (Resource resource : resources) { + // 鑾峰彇璧勬簮鐨勭被鍏冩暟鎹� ClassMetadata classMetadata = factory.getMetadataReader(resource).getClassMetadata(); + // 鑾峰彇璧勬簮瀵瑰簲鐨勭被瀵硅薄 Class<?> clazz = Resources.classForName(classMetadata.getClassName()); + // 鏌ユ壘绫讳腑鐨勭壒瀹氭敞瑙� findAnnotation(clazz); } } @@ -181,9 +210,13 @@ } } + /** + * 鍦ㄦ寚瀹氱殑绫讳腑鏌ユ壘鐗瑰畾鐨勬敞瑙� DataPermission锛屽苟灏嗗甫鏈夎繖涓敞瑙g殑鏂规硶鎴栫被瀛樺偍鍒� dataPermissionCacheMap 涓� + * + * @param clazz 瑕佹煡鎵剧殑绫� + */ private void findAnnotation(Class<?> clazz) { DataPermission dataPermission; - // 鑾峰彇鏂规硶娉ㄨВ for (Method method : clazz.getMethods()) { if (method.isDefault() || method.isVarArgs()) { continue; @@ -194,17 +227,24 @@ dataPermissionCacheMap.put(mappedStatementId, dataPermission); } } - // 鑾峰彇绫绘敞瑙� if (AnnotationUtil.hasAnnotation(clazz, DataPermission.class)) { dataPermission = AnnotationUtil.getAnnotation(clazz, DataPermission.class); dataPermissionCacheMap.put(clazz.getName(), dataPermission); } } + /** + * 鏍规嵁鏄犲皠璇彞 ID 鎴栫被鍚嶈幏鍙栧搴旂殑 DataPermission 娉ㄨВ瀵硅薄 + * + * @param mapperId 鏄犲皠璇彞 ID + * @return DataPermission 娉ㄨВ瀵硅薄锛屽鏋滀笉瀛樺湪鍒欒繑鍥� null + */ public DataPermission getDataPermission(String mapperId) { + // 妫�鏌ョ紦瀛樹腑鏄惁鍖呭惈鏄犲皠璇彞 ID 瀵瑰簲鐨� DataPermission 娉ㄨВ瀵硅薄 if (dataPermissionCacheMap.containsKey(mapperId)) { return dataPermissionCacheMap.get(mapperId); } + // 濡傛灉缂撳瓨涓笉鍖呭惈鏄犲皠璇彞 ID 瀵瑰簲鐨� DataPermission 娉ㄨВ瀵硅薄锛屽垯灏濊瘯浣跨敤绫诲悕浣滀负閿煡鎵� String clazzName = mapperId.substring(0, mapperId.lastIndexOf(".")); if (dataPermissionCacheMap.containsKey(clazzName)) { return dataPermissionCacheMap.get(clazzName); @@ -213,7 +253,10 @@ } /** - * 鏄惁鏃犳晥 + * 妫�鏌ョ粰瀹氱殑鏄犲皠璇彞 ID 鏄惁鏈夋晥锛屽嵆鏄惁鑳藉鎵惧埌瀵瑰簲鐨� DataPermission 娉ㄨВ瀵硅薄 + * + * @param mapperId 鏄犲皠璇彞 ID + * @return 濡傛灉鎵惧埌瀵瑰簲鐨� DataPermission 娉ㄨВ瀵硅薄锛屽垯杩斿洖 false锛涘惁鍒欒繑鍥� true */ public boolean invalid(String mapperId) { return getDataPermission(mapperId) == null; diff --git a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/helper/DataBaseHelper.java b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/helper/DataBaseHelper.java index bb20f4b..a7cfee5 100644 --- a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/helper/DataBaseHelper.java +++ b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/helper/DataBaseHelper.java @@ -2,11 +2,11 @@ import cn.hutool.core.convert.Convert; import com.baomidou.dynamic.datasource.DynamicRoutingDataSource; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.utils.SpringUtils; import org.dromara.common.mybatis.enums.DataBaseType; -import lombok.AccessLevel; -import lombok.NoArgsConstructor; import javax.sql.DataSource; import java.sql.Connection; @@ -14,7 +14,6 @@ import java.sql.SQLException; import java.util.ArrayList; import java.util.List; -import java.util.Set; /** * 鏁版嵁搴撳姪鎵� diff --git a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/helper/DataPermissionHelper.java b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/helper/DataPermissionHelper.java index 7f6ab1f..2afe9ee 100644 --- a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/helper/DataPermissionHelper.java +++ b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/helper/DataPermissionHelper.java @@ -24,17 +24,35 @@ private static final String DATA_PERMISSION_KEY = "data:permission"; + /** + * 浠庝笂涓嬫枃涓幏鍙栨寚瀹氶敭鐨勫彉閲忓�硷紝骞跺皢鍏惰浆鎹负鎸囧畾鐨勭被鍨� + * + * @param key 鍙橀噺鐨勯敭 + * @param <T> 鍙橀噺鍊肩殑绫诲瀷 + * @return 鎸囧畾閿殑鍙橀噺鍊硷紝濡傛灉涓嶅瓨鍦ㄥ垯杩斿洖 null + */ public static <T> T getVariable(String key) { Map<String, Object> context = getContext(); return (T) context.get(key); } - + /** + * 鍚戜笂涓嬫枃涓缃寚瀹氶敭鐨勫彉閲忓�� + * + * @param key 瑕佽缃殑鍙橀噺鐨勯敭 + * @param value 瑕佽缃殑鍙橀噺鍊� + */ public static void setVariable(String key, Object value) { Map<String, Object> context = getContext(); context.put(key, value); } + /** + * 鑾峰彇鏁版嵁鏉冮檺涓婁笅鏂� + * + * @return 瀛樺偍鍦⊿aStorage涓殑Map瀵硅薄锛岀敤浜庡瓨鍌ㄦ暟鎹潈闄愮浉鍏崇殑涓婁笅鏂囦俊鎭� + * @throws NullPointerException 濡傛灉鏁版嵁鏉冮檺涓婁笅鏂囩被鍨嬪紓甯革紝鍒欐姏鍑篘ullPointerException + */ public static Map<String, Object> getContext() { SaStorage saStorage = SaHolder.getStorage(); Object attribute = saStorage.get(DATA_PERMISSION_KEY); @@ -64,6 +82,7 @@ /** * 鍦ㄥ拷鐣ユ暟鎹潈闄愪腑鎵ц + * <p>绂佹鍦ㄥ拷鐣ユ暟鎹潈闄愪腑鎵ц蹇界暐鏁版嵁鏉冮檺</p> * * @param handle 澶勭悊鎵ц鏂规硶 */ @@ -78,6 +97,7 @@ /** * 鍦ㄥ拷鐣ユ暟鎹潈闄愪腑鎵ц + * <p>绂佹鍦ㄥ拷鐣ユ暟鎹潈闄愪腑鎵ц蹇界暐鏁版嵁鏉冮檺</p> * * @param handle 澶勭悊鎵ц鏂规硶 */ diff --git a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/interceptor/PlusDataPermissionInterceptor.java b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/interceptor/PlusDataPermissionInterceptor.java index 6eed8f7..85a4d0a 100644 --- a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/interceptor/PlusDataPermissionInterceptor.java +++ b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/interceptor/PlusDataPermissionInterceptor.java @@ -37,17 +37,33 @@ private final PlusDataPermissionHandler dataPermissionHandler; + /** + * 鏋勯�犲嚱鏁帮紝鍒濆鍖� PlusDataPermissionHandler 瀹炰緥 + * + * @param mapperPackage 鎵弿鐨勬槧灏勫櫒鍖� + */ public PlusDataPermissionInterceptor(String mapperPackage) { this.dataPermissionHandler = new PlusDataPermissionHandler(mapperPackage); } + /** + * 鍦ㄦ墽琛屾煡璇箣鍓嶏紝妫�鏌ュ苟澶勭悊鏁版嵁鏉冮檺鐩稿叧閫昏緫 + * + * @param executor MyBatis 鎵ц鍣ㄥ璞� + * @param ms 鏄犲皠璇彞瀵硅薄 + * @param parameter 鏂规硶鍙傛暟 + * @param rowBounds 鍒嗛〉瀵硅薄 + * @param resultHandler 缁撴灉澶勭悊鍣� + * @param boundSql 缁戝畾鐨� SQL 瀵硅薄 + * @throws SQLException 濡傛灉鍙戠敓 SQL 寮傚父 + */ @Override public void beforeQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) throws SQLException { - // 妫�鏌ュ拷鐣ユ敞瑙� + // 妫�鏌ユ槸鍚﹂渶瑕佸拷鐣ユ暟鎹潈闄愬鐞� if (InterceptorIgnoreHelper.willIgnoreDataPermission(ms.getId())) { return; } - // 妫�鏌ユ槸鍚︽棤鏁� 鏃犳暟鎹潈闄愭敞瑙� + // 妫�鏌ユ槸鍚︾己灏戞湁鏁堢殑鏁版嵁鏉冮檺娉ㄨВ if (dataPermissionHandler.invalid(ms.getId())) { return; } @@ -56,16 +72,26 @@ mpBs.sql(parserSingle(mpBs.sql(), ms.getId())); } + /** + * 鍦ㄥ噯澶� SQL 璇彞涔嬪墠锛屾鏌ュ苟澶勭悊鏇存柊鍜屽垹闄ゆ搷浣滅殑鏁版嵁鏉冮檺鐩稿叧閫昏緫 + * + * @param sh MyBatis StatementHandler 瀵硅薄 + * @param connection 鏁版嵁搴撹繛鎺ュ璞� + * @param transactionTimeout 浜嬪姟瓒呮椂鏃堕棿 + */ @Override public void beforePrepare(StatementHandler sh, Connection connection, Integer transactionTimeout) { PluginUtils.MPStatementHandler mpSh = PluginUtils.mpStatementHandler(sh); MappedStatement ms = mpSh.mappedStatement(); + // 鑾峰彇 SQL 鍛戒护绫诲瀷锛堝銆佸垹銆佹敼銆佹煡锛� SqlCommandType sct = ms.getSqlCommandType(); + + // 鍙鐞嗘洿鏂板拰鍒犻櫎鎿嶄綔鐨� SQL 璇彞 if (sct == SqlCommandType.UPDATE || sct == SqlCommandType.DELETE) { if (InterceptorIgnoreHelper.willIgnoreDataPermission(ms.getId())) { return; } - // 妫�鏌ユ槸鍚︽棤鏁� 鏃犳暟鎹潈闄愭敞瑙� + // 妫�鏌ユ槸鍚︾己灏戞湁鏁堢殑鏁版嵁鏉冮檺娉ㄨВ if (dataPermissionHandler.invalid(ms.getId())) { return; } @@ -74,6 +100,14 @@ } } + /** + * 澶勭悊 SELECT 鏌ヨ璇彞涓殑 WHERE 鏉′欢 + * + * @param select SELECT 鏌ヨ瀵硅薄 + * @param index 鏌ヨ璇彞鐨勭储寮� + * @param sql 鏌ヨ璇彞 + * @param obj WHERE 鏉′欢鍙傛暟 + */ @Override protected void processSelect(Select select, int index, String sql, Object obj) { if (select instanceof PlainSelect) { @@ -84,6 +118,14 @@ } } + /** + * 澶勭悊 UPDATE 璇彞涓殑 WHERE 鏉′欢 + * + * @param update UPDATE 鏌ヨ瀵硅薄 + * @param index 鏌ヨ璇彞鐨勭储寮� + * @param sql 鏌ヨ璇彞 + * @param obj WHERE 鏉′欢鍙傛暟 + */ @Override protected void processUpdate(Update update, int index, String sql, Object obj) { Expression sqlSegment = dataPermissionHandler.getSqlSegment(update.getWhere(), (String) obj, false); @@ -92,6 +134,14 @@ } } + /** + * 澶勭悊 DELETE 璇彞涓殑 WHERE 鏉′欢 + * + * @param delete DELETE 鏌ヨ瀵硅薄 + * @param index 鏌ヨ璇彞鐨勭储寮� + * @param sql 鏌ヨ璇彞 + * @param obj WHERE 鏉′欢鍙傛暟 + */ @Override protected void processDelete(Delete delete, int index, String sql, Object obj) { Expression sqlSegment = dataPermissionHandler.getSqlSegment(delete.getWhere(), (String) obj, false); @@ -101,10 +151,10 @@ } /** - * 璁剧疆 where 鏉′欢 + * 璁剧疆 SELECT 璇彞鐨� WHERE 鏉′欢 * - * @param plainSelect 鏌ヨ瀵硅薄 - * @param mappedStatementId 鎵ц鏂规硶id + * @param plainSelect SELECT 鏌ヨ瀵硅薄 + * @param mappedStatementId 鏄犲皠璇彞鐨� ID */ protected void setWhere(PlainSelect plainSelect, String mappedStatementId) { Expression sqlSegment = dataPermissionHandler.getSqlSegment(plainSelect.getWhere(), mappedStatementId, true); @@ -113,6 +163,14 @@ } } + /** + * 鏋勫缓琛ㄨ揪寮忥紝鐢ㄤ簬澶勭悊琛ㄧ殑鏁版嵁鏉冮檺 + * + * @param table 琛ㄥ璞� + * @param where WHERE 鏉′欢琛ㄨ揪寮� + * @param whereSegment WHERE 鏉′欢鐗囨 + * @return 鏋勫缓鐨勮〃杈惧紡 + */ @Override public Expression buildTableExpression(Table table, Expression where, String whereSegment) { // 鍙湁鏂扮増鏁版嵁鏉冮檺澶勭悊鍣ㄦ墠浼氭墽琛屽埌杩欓噷 diff --git a/ruoyi-common/ruoyi-common-mybatis/src/main/resources/spy.properties b/ruoyi-common/ruoyi-common-mybatis/src/main/resources/spy.properties index e9d10f3..f3ed7d8 100644 --- a/ruoyi-common/ruoyi-common-mybatis/src/main/resources/spy.properties +++ b/ruoyi-common/ruoyi-common-mybatis/src/main/resources/spy.properties @@ -17,4 +17,4 @@ # 鏄惁杩囨护 Log filter=true # 杩囨护 Log 鏃舵墍鎺掗櫎鐨� sql 鍏抽敭瀛楋紝浠ラ�楀彿鍒嗛殧 -exclude=SELECT 1 +exclude= diff --git a/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java b/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java index 86668aa..5e300da 100644 --- a/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java +++ b/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java @@ -178,6 +178,7 @@ .key(key) .contentMD5(StringUtils.isNotEmpty(md5Digest) ? md5Digest : null) .contentType(contentType) + .acl(getAccessPolicy().getObjectCannedACL()) .build()) .addTransferListener(LoggingTransferListener.create()) .source(filePath).build()); @@ -223,6 +224,7 @@ y -> y.bucket(properties.getBucketName()) .key(key) .contentType(contentType) + .acl(getAccessPolicy().getObjectCannedACL()) .build()) .build()); diff --git a/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/utils/QueueUtils.java b/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/utils/QueueUtils.java index 4587e64..e436a46 100644 --- a/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/utils/QueueUtils.java +++ b/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/utils/QueueUtils.java @@ -1,12 +1,13 @@ package org.dromara.common.redis.utils; -import org.dromara.common.core.utils.SpringUtils; import lombok.AccessLevel; import lombok.NoArgsConstructor; +import org.dromara.common.core.utils.SpringUtils; import org.redisson.api.*; +import java.util.concurrent.CompletionStage; import java.util.concurrent.TimeUnit; -import java.util.function.Consumer; +import java.util.function.Function; /** * 鍒嗗竷寮忛槦鍒楀伐鍏� @@ -224,7 +225,7 @@ /** * 璁㈤槄闃诲闃熷垪(鍙闃呮墍鏈夊疄鐜扮被 渚嬪: 寤惰繜 浼樺厛 鏈夌晫 绛�) */ - public static <T> void subscribeBlockingQueue(String queueName, Consumer<T> consumer, boolean isDelayed) { + public static <T> void subscribeBlockingQueue(String queueName, Function<T, CompletionStage<Void>> consumer, boolean isDelayed) { RBlockingQueue<T> queue = CLIENT.getBlockingQueue(queueName); if (isDelayed) { // 璁㈤槄寤惰繜闃熷垪 diff --git a/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/utils/LoginHelper.java b/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/utils/LoginHelper.java index 1e0d8a7..4ab7d4e 100644 --- a/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/utils/LoginHelper.java +++ b/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/utils/LoginHelper.java @@ -3,6 +3,7 @@ import cn.dev33.satoken.session.SaSession; import cn.dev33.satoken.stp.SaLoginModel; import cn.dev33.satoken.stp.StpUtil; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.util.ObjectUtil; import lombok.AccessLevel; @@ -88,6 +89,13 @@ } /** + * 鑾峰彇鐢ㄦ埛璐︽埛 + */ + public static String getUsername() { + return Convert.toStr(getExtra(USER_NAME_KEY)); + } + + /** * 鑾峰彇绉熸埛ID */ public static String getTenantId() { @@ -130,13 +138,6 @@ } /** - * 鑾峰彇鐢ㄦ埛璐︽埛 - */ - public static String getUsername() { - return getLoginUser().getUsername(); - } - - /** * 鑾峰彇鐢ㄦ埛绫诲瀷 */ public static UserType getUserType() { @@ -170,6 +171,9 @@ * @return 缁撴灉 */ public static boolean isTenantAdmin(Set<String> rolePermission) { + if (CollUtil.isEmpty(rolePermission)) { + return false; + } return rolePermission.contains(TenantConstants.TENANT_ADMIN_ROLE_KEY); } @@ -188,7 +192,11 @@ * @return 缁撴灉 */ public static boolean isLogin() { - return getLoginUser() != null; + try { + return getLoginUser() != null; + } catch (Exception e) { + return false; + } } } diff --git a/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/config/UndertowConfig.java b/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/config/UndertowConfig.java index 0f78928..ac50dd2 100644 --- a/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/config/UndertowConfig.java +++ b/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/config/UndertowConfig.java @@ -16,15 +16,11 @@ @AutoConfiguration public class UndertowConfig implements WebServerFactoryCustomizer<UndertowServletWebServerFactory> { - /** - * 璁剧疆 Undertow 鐨� websocket 缂撳啿姹� - */ @Override public void customize(UndertowServletWebServerFactory factory) { - // 榛樿涓嶇洿鎺ュ垎閰嶅唴瀛� 濡傛灉椤圭洰涓娇鐢ㄤ簡 websocket 寤鸿鐩存帴鍒嗛厤 factory.addDeploymentInfoCustomizers(deploymentInfo -> { WebSocketDeploymentInfo webSocketDeploymentInfo = new WebSocketDeploymentInfo(); - webSocketDeploymentInfo.setBuffers(new DefaultByteBufferPool(false, 512)); + webSocketDeploymentInfo.setBuffers(new DefaultByteBufferPool(true, 1024)); deploymentInfo.addServletContextAttribute("io.undertow.websockets.jsr.WebSocketDeploymentInfo", webSocketDeploymentInfo); // 浣跨敤铏氭嫙绾跨▼ if (SpringUtils.isVirtual()) { diff --git a/ruoyi-common/ruoyi-common-websocket/src/main/java/org/dromara/common/websocket/interceptor/PlusWebSocketInterceptor.java b/ruoyi-common/ruoyi-common-websocket/src/main/java/org/dromara/common/websocket/interceptor/PlusWebSocketInterceptor.java index 1ad8ad6..c70e377 100644 --- a/ruoyi-common/ruoyi-common-websocket/src/main/java/org/dromara/common/websocket/interceptor/PlusWebSocketInterceptor.java +++ b/ruoyi-common/ruoyi-common-websocket/src/main/java/org/dromara/common/websocket/interceptor/PlusWebSocketInterceptor.java @@ -35,23 +35,28 @@ */ @Override public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map<String, Object> attributes) { - // 妫�鏌ユ槸鍚︾櫥褰� 鏄惁鏈塼oken - LoginUser loginUser = LoginHelper.getLoginUser(); + try { + // 妫�鏌ユ槸鍚︾櫥褰� 鏄惁鏈塼oken + LoginUser loginUser = LoginHelper.getLoginUser(); - // 瑙e喅 ws 涓嶈蛋 mvc 鎷︽埅鍣ㄩ棶棰�(cloud 鐗堟湰涓嶅彈褰卞搷) - // 妫�鏌� header 涓� param 閲岀殑 clientid 涓� token 閲岀殑鏄惁涓�鑷� - String headerCid = ServletUtils.getRequest().getHeader(LoginHelper.CLIENT_KEY); - String paramCid = ServletUtils.getParameter(LoginHelper.CLIENT_KEY); - String clientId = StpUtil.getExtra(LoginHelper.CLIENT_KEY).toString(); - if (!StringUtils.equalsAny(clientId, headerCid, paramCid)) { - // token 鏃犳晥 - throw NotLoginException.newInstance(StpUtil.getLoginType(), - "-100", "瀹㈡埛绔疘D涓嶵oken涓嶅尮閰�", - StpUtil.getTokenValue()); + // 瑙e喅 ws 涓嶈蛋 mvc 鎷︽埅鍣ㄩ棶棰�(cloud 鐗堟湰涓嶅彈褰卞搷) + // 妫�鏌� header 涓� param 閲岀殑 clientid 涓� token 閲岀殑鏄惁涓�鑷� + String headerCid = ServletUtils.getRequest().getHeader(LoginHelper.CLIENT_KEY); + String paramCid = ServletUtils.getParameter(LoginHelper.CLIENT_KEY); + String clientId = StpUtil.getExtra(LoginHelper.CLIENT_KEY).toString(); + if (!StringUtils.equalsAny(clientId, headerCid, paramCid)) { + // token 鏃犳晥 + throw NotLoginException.newInstance(StpUtil.getLoginType(), + "-100", "瀹㈡埛绔疘D涓嶵oken涓嶅尮閰�", + StpUtil.getTokenValue()); + } + + attributes.put(LOGIN_USER_KEY, loginUser); + return true; + } catch (NotLoginException e) { + log.error("WebSocket 璁よ瘉澶辫触'{}',鏃犳硶璁块棶绯荤粺璧勬簮", e.getMessage()); + return false; } - - attributes.put(LOGIN_USER_KEY, loginUser); - return true; } /** diff --git a/ruoyi-extend/ruoyi-monitor-admin/Dockerfile b/ruoyi-extend/ruoyi-monitor-admin/Dockerfile index a54f816..6fbee5f 100644 --- a/ruoyi-extend/ruoyi-monitor-admin/Dockerfile +++ b/ruoyi-extend/ruoyi-monitor-admin/Dockerfile @@ -1,7 +1,9 @@ +# 璐濆皵瀹為獙瀹� Spring 瀹樻柟鎺ㄨ崘闀滃儚 JDK涓嬭浇鍦板潃 https://bell-sw.com/pages/downloads/ +FROM bellsoft/liberica-openjdk-alpine:17.0.11-cds +#FROM bellsoft/liberica-openjdk-alpine:21.0.3-cds #FROM findepi/graalvm:java17-native -FROM openjdk:17.0.2-oraclelinux8 -MAINTAINER Lion Li +LABEL maintainer="Lion Li" RUN mkdir -p /ruoyi/monitor/logs diff --git a/ruoyi-extend/ruoyi-snailjob-server/Dockerfile b/ruoyi-extend/ruoyi-snailjob-server/Dockerfile index 1fda8db..8200c6f 100644 --- a/ruoyi-extend/ruoyi-snailjob-server/Dockerfile +++ b/ruoyi-extend/ruoyi-snailjob-server/Dockerfile @@ -1,7 +1,9 @@ +# 璐濆皵瀹為獙瀹� Spring 瀹樻柟鎺ㄨ崘闀滃儚 JDK涓嬭浇鍦板潃 https://bell-sw.com/pages/downloads/ +FROM bellsoft/liberica-openjdk-alpine:17.0.11-cds +#FROM bellsoft/liberica-openjdk-alpine:21.0.3-cds #FROM findepi/graalvm:java17-native -FROM openjdk:17.0.2-oraclelinux8 -MAINTAINER Lion Li +LABEL maintainer="Lion Li" RUN mkdir -p /ruoyi/snailjob/logs @@ -10,7 +12,7 @@ ENV LANG=C.UTF-8 LC_ALL=C.UTF-8 JAVA_OPTS="-Xms512m -Xmx1024m" EXPOSE 8800 -EXPOSE 1788 +EXPOSE 17888 ADD ./target/ruoyi-snailjob-server.jar ./app.jar diff --git a/ruoyi-extend/ruoyi-snailjob-server/src/main/resources/application-dev.yml b/ruoyi-extend/ruoyi-snailjob-server/src/main/resources/application-dev.yml index be0b9b4..3c65077 100644 --- a/ruoyi-extend/ruoyi-snailjob-server/src/main/resources/application-dev.yml +++ b/ruoyi-extend/ruoyi-snailjob-server/src/main/resources/application-dev.yml @@ -21,7 +21,7 @@ # 鎷夊彇閲嶈瘯鏁版嵁鐨勬瘡鎵规鐨勫ぇ灏� job-pull-page-size: 1000 # 鏈嶅姟绔痭etty绔彛 - netty-port: 1788 + netty-port: 17888 # 涓�涓鎴风姣忕鏈�澶氭帴鏀剁殑閲嶈瘯鏁伴噺鎸囦护 limiter: 1000 # 鍙锋妯″紡涓嬫闀块厤缃� diff --git a/ruoyi-extend/ruoyi-snailjob-server/src/main/resources/application-prod.yml b/ruoyi-extend/ruoyi-snailjob-server/src/main/resources/application-prod.yml index 4c69ee7..37ab887 100644 --- a/ruoyi-extend/ruoyi-snailjob-server/src/main/resources/application-prod.yml +++ b/ruoyi-extend/ruoyi-snailjob-server/src/main/resources/application-prod.yml @@ -21,7 +21,7 @@ # 鎷夊彇閲嶈瘯鏁版嵁鐨勬瘡鎵规鐨勫ぇ灏� job-pull-page-size: 1000 # 鏈嶅姟绔� netty 绔彛 - netty-port: 1788 + netty-port: 17888 # 涓�涓鎴风姣忕鏈�澶氭帴鏀剁殑閲嶈瘯鏁伴噺鎸囦护 limiter: 1000 # 鍙锋妯″紡涓嬫闀块厤缃� diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/queue/DelayedQueueController.java b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/queue/DelayedQueueController.java index fb2aade..b6e51d3 100644 --- a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/queue/DelayedQueueController.java +++ b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/queue/DelayedQueueController.java @@ -1,14 +1,15 @@ package org.dromara.demo.controller.queue; import cn.dev33.satoken.annotation.SaIgnore; -import org.dromara.common.core.domain.R; -import org.dromara.common.redis.utils.QueueUtils; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.dromara.common.core.domain.R; +import org.dromara.common.redis.utils.QueueUtils; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; /** @@ -42,6 +43,10 @@ QueueUtils.subscribeBlockingQueue(queueName, (String orderNum) -> { // 瑙傚療鎺ユ敹鏃堕棿 log.info("閫氶亾: {}, 鏀跺埌鏁版嵁: {}", queueName, orderNum); + return CompletableFuture.runAsync(() -> { + // 寮傛澶勭悊鏁版嵁閫昏緫 涓嶈鍦ㄤ笂鏂瑰鐞嗕笟鍔¢�昏緫 + log.info("鏁版嵁澶勭悊: {}", orderNum); + }); }, true); return R.ok("鎿嶄綔鎴愬姛"); } diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/mapper/TestDemoMapper.java b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/mapper/TestDemoMapper.java index ddf68f2..bd94b1c 100644 --- a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/mapper/TestDemoMapper.java +++ b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/mapper/TestDemoMapper.java @@ -55,5 +55,5 @@ @DataColumn(key = "deptName", value = "dept_id"), @DataColumn(key = "userName", value = "user_id") }) - int deleteBatchIds(@Param(Constants.COLL) Collection<?> idList); + int deleteByIds(@Param(Constants.COLL) Collection<?> idList); } diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/impl/TestDemoServiceImpl.java b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/impl/TestDemoServiceImpl.java index b3c6ec2..86b39c2 100644 --- a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/impl/TestDemoServiceImpl.java +++ b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/impl/TestDemoServiceImpl.java @@ -101,7 +101,7 @@ if (isValid) { //TODO 鍋氫竴浜涗笟鍔′笂鐨勬牎楠�,鍒ゆ柇鏄惁闇�瑕佹牎楠� } - return baseMapper.deleteBatchIds(ids) > 0; + return baseMapper.deleteByIds(ids) > 0; } @Override diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/impl/TestTreeServiceImpl.java b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/impl/TestTreeServiceImpl.java index 463934c..e4e548b 100644 --- a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/impl/TestTreeServiceImpl.java +++ b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/impl/TestTreeServiceImpl.java @@ -83,6 +83,6 @@ if (isValid) { //TODO 鍋氫竴浜涗笟鍔′笂鐨勬牎楠�,鍒ゆ柇鏄惁闇�瑕佹牎楠� } - return baseMapper.deleteBatchIds(ids) > 0; + return baseMapper.deleteByIds(ids) > 0; } } diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/service/GenTableServiceImpl.java b/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/service/GenTableServiceImpl.java index d418815..02a9fa7 100644 --- a/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/service/GenTableServiceImpl.java +++ b/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/service/GenTableServiceImpl.java @@ -165,7 +165,7 @@ @Override public void deleteGenTableByIds(Long[] tableIds) { List<Long> ids = Arrays.asList(tableIds); - baseMapper.deleteBatchIds(ids); + baseMapper.deleteByIds(ids); genTableColumnMapper.delete(new LambdaQueryWrapper<GenTableColumn>().in(GenTableColumn::getTableId, ids)); } @@ -332,7 +332,7 @@ if (CollUtil.isNotEmpty(delColumns)) { List<Long> ids = StreamUtils.toList(delColumns, GenTableColumn::getColumnId); if (CollUtil.isNotEmpty(ids)) { - genTableColumnMapper.deleteBatchIds(ids); + genTableColumnMapper.deleteByIds(ids); } } } diff --git a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/serviceImpl.java.vm b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/serviceImpl.java.vm index e7236fd..67690ca 100644 --- a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/serviceImpl.java.vm +++ b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/serviceImpl.java.vm @@ -149,6 +149,6 @@ if(isValid){ //TODO 鍋氫竴浜涗笟鍔′笂鐨勬牎楠�,鍒ゆ柇鏄惁闇�瑕佹牎楠� } - return baseMapper.deleteBatchIds(ids) > 0; + return baseMapper.deleteByIds(ids) > 0; } } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysDeptController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysDeptController.java index 98b76e4..4f5f23f 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysDeptController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysDeptController.java @@ -75,8 +75,6 @@ public R<Void> add(@Validated @RequestBody SysDeptBo dept) { if (!deptService.checkDeptNameUnique(dept)) { return R.fail("鏂板閮ㄩ棬'" + dept.getDeptName() + "'澶辫触锛岄儴闂ㄥ悕绉板凡瀛樺湪"); - } else if (StringUtils.isNotBlank(dept.getDeptCategory()) && !deptService.checkDeptCategoryUnique(dept)) { - return R.fail("鏂板閮ㄩ棬'" + dept.getDeptName() + "'澶辫触锛岄儴闂ㄧ被鍒紪鐮佸凡瀛樺湪"); } return toAjax(deptService.insertDept(dept)); } @@ -92,8 +90,6 @@ deptService.checkDeptDataScope(deptId); if (!deptService.checkDeptNameUnique(dept)) { return R.fail("淇敼閮ㄩ棬'" + dept.getDeptName() + "'澶辫触锛岄儴闂ㄥ悕绉板凡瀛樺湪"); - } else if (StringUtils.isNotBlank(dept.getDeptCategory()) && !deptService.checkDeptCategoryUnique(dept)) { - return R.fail("淇敼閮ㄩ棬'" + dept.getDeptName() + "'澶辫触锛岄儴闂ㄧ被鍒紪鐮佸凡瀛樺湪"); } else if (dept.getParentId().equals(deptId)) { return R.fail("淇敼閮ㄩ棬'" + dept.getDeptName() + "'澶辫触锛屼笂绾ч儴闂ㄤ笉鑳芥槸鑷繁"); } else if (StringUtils.equals(UserConstants.DEPT_DISABLE, dept.getStatus())) { diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysMenuMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysMenuMapper.java index b2be0e9..ac646c0 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysMenuMapper.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysMenuMapper.java @@ -19,13 +19,6 @@ public interface SysMenuMapper extends BaseMapperPlus<SysMenu, SysMenuVo> { /** - * 鏍规嵁鐢ㄦ埛鎵�鏈夋潈闄� - * - * @return 鏉冮檺鍒楄〃 - */ - List<String> selectMenuPerms(); - - /** * 鏍规嵁鐢ㄦ埛鏌ヨ绯荤粺鑿滃崟鍒楄〃 * * @param queryWrapper 鏌ヨ鏉′欢 diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysDeptService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysDeptService.java index cd984d8..bf16642 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysDeptService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysDeptService.java @@ -93,14 +93,6 @@ boolean checkDeptNameUnique(SysDeptBo dept); /** - * 鏍¢獙閮ㄩ棬绫诲埆缂栫爜鏄惁鍞竴 - * - * @param dept 閮ㄩ棬淇℃伅 - * @return 缁撴灉 - */ - boolean checkDeptCategoryUnique(SysDeptBo dept); - - /** * 鏍¢獙閮ㄩ棬鏄惁鏈夋暟鎹潈闄� * * @param deptId 閮ㄩ棬id diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysClientServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysClientServiceImpl.java index 26bc491..1c69243 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysClientServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysClientServiceImpl.java @@ -146,6 +146,6 @@ if (isValid) { //TODO 鍋氫竴浜涗笟鍔′笂鐨勬牎楠�,鍒ゆ柇鏄惁闇�瑕佹牎楠� } - return baseMapper.deleteBatchIds(ids) > 0; + return baseMapper.deleteByIds(ids) > 0; } } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysConfigServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysConfigServiceImpl.java index bebfdad..46526bd 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysConfigServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysConfigServiceImpl.java @@ -178,7 +178,7 @@ } CacheUtils.evict(CacheNames.SYS_CONFIG, config.getConfigKey()); } - baseMapper.deleteBatchIds(Arrays.asList(configIds)); + baseMapper.deleteByIds(Arrays.asList(configIds)); } /** diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDataScopeServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDataScopeServiceImpl.java index d7ba934..a31c426 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDataScopeServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDataScopeServiceImpl.java @@ -3,14 +3,14 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import org.dromara.system.domain.SysDept; -import org.dromara.common.mybatis.helper.DataBaseHelper; +import lombok.RequiredArgsConstructor; import org.dromara.common.core.utils.StreamUtils; +import org.dromara.common.mybatis.helper.DataBaseHelper; +import org.dromara.system.domain.SysDept; import org.dromara.system.domain.SysRoleDept; import org.dromara.system.mapper.SysDeptMapper; import org.dromara.system.mapper.SysRoleDeptMapper; import org.dromara.system.service.ISysDataScopeService; -import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import java.util.List; @@ -30,6 +30,12 @@ private final SysRoleDeptMapper roleDeptMapper; private final SysDeptMapper deptMapper; + /** + * 鑾峰彇瑙掕壊鑷畾涔夋潈闄� + * + * @param roleId 瑙掕壊Id + * @return 閮ㄩ棬Id缁� + */ @Override public String getRoleCustom(Long roleId) { List<SysRoleDept> list = roleDeptMapper.selectList( @@ -42,6 +48,12 @@ return null; } + /** + * 鑾峰彇閮ㄩ棬鍙婁互涓嬫潈闄� + * + * @param deptId 閮ㄩ棬Id + * @return 閮ㄩ棬Id缁� + */ @Override public String getDeptAndChild(Long deptId) { List<SysDept> deptList = deptMapper.selectList(new LambdaQueryWrapper<SysDept>() diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java index cb3f340..5054036 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java @@ -219,20 +219,6 @@ } /** - * 鏍¢獙閮ㄩ棬绫诲埆缂栫爜鏄惁鍞竴 - * - * @param dept 閮ㄩ棬淇℃伅 - * @return 缁撴灉 - */ - @Override - public boolean checkDeptCategoryUnique(SysDeptBo dept) { - boolean exist = baseMapper.exists(new LambdaQueryWrapper<SysDept>() - .eq(SysDept::getDeptCategory, dept.getDeptCategory()) - .ne(ObjectUtil.isNotNull(dept.getDeptId()), SysDept::getDeptId, dept.getDeptId())); - return !exist; - } - - /** * 鏍¢獙閮ㄩ棬鏄惁鏈夋暟鎹潈闄� * * @param deptId 閮ㄩ棬id diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDictTypeServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDictTypeServiceImpl.java index bc6663f..1be0b7f 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDictTypeServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDictTypeServiceImpl.java @@ -141,7 +141,7 @@ } CacheUtils.evict(CacheNames.SYS_DICT, dictType.getDictType()); } - baseMapper.deleteBatchIds(Arrays.asList(dictIds)); + baseMapper.deleteByIds(Arrays.asList(dictIds)); } /** diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysLogininforServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysLogininforServiceImpl.java index 9c930a0..b95baf4 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysLogininforServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysLogininforServiceImpl.java @@ -163,7 +163,7 @@ */ @Override public int deleteLogininforByIds(Long[] infoIds) { - return baseMapper.deleteBatchIds(Arrays.asList(infoIds)); + return baseMapper.deleteByIds(Arrays.asList(infoIds)); } /** diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysMenuServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysMenuServiceImpl.java index 6e1765b..af844c9 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysMenuServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysMenuServiceImpl.java @@ -75,7 +75,7 @@ .orderByAsc(SysMenu::getOrderNum)); } else { QueryWrapper<SysMenu> wrapper = Wrappers.query(); - wrapper.eq("sur.user_id", userId) + wrapper.inSql("r.role_id", "select role_id from sys_user_role where user_id = " + userId) .like(StringUtils.isNotBlank(menu.getMenuName()), "m.menu_name", menu.getMenuName()) .eq(StringUtils.isNotBlank(menu.getVisible()), "m.visible", menu.getVisible()) .eq(StringUtils.isNotBlank(menu.getStatus()), "m.status", menu.getStatus()) @@ -178,6 +178,7 @@ /** * 鏋勫缓鍓嶇璺敱鎵�闇�瑕佺殑鑿滃崟 + * 璺敱name鍛藉悕瑙勫垯 path棣栧瓧姣嶈浆澶у啓 + id * * @param menus 鑿滃崟鍒楄〃 * @return 璺敱鍒楄〃 @@ -186,9 +187,10 @@ public List<RouterVo> buildMenus(List<SysMenu> menus) { List<RouterVo> routers = new LinkedList<>(); for (SysMenu menu : menus) { + String name = menu.getRouteName() + menu.getMenuId(); RouterVo router = new RouterVo(); router.setHidden("1".equals(menu.getVisible())); - router.setName(menu.getRouteName()); + router.setName(name); router.setPath(menu.getRouterPath()); router.setComponent(menu.getComponentInfo()); router.setQuery(menu.getQueryParam()); @@ -199,12 +201,13 @@ router.setRedirect("noRedirect"); router.setChildren(buildMenus(cMenus)); } else if (menu.isMenuFrame()) { + String frameName = StringUtils.capitalize(menu.getPath()) + menu.getMenuId(); router.setMeta(null); List<RouterVo> childrenList = new ArrayList<>(); RouterVo children = new RouterVo(); children.setPath(menu.getPath()); children.setComponent(menu.getComponent()); - children.setName(StringUtils.capitalize(menu.getPath())); + children.setName(frameName); children.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath())); children.setQuery(menu.getQueryParam()); childrenList.add(children); @@ -215,9 +218,10 @@ List<RouterVo> childrenList = new ArrayList<>(); RouterVo children = new RouterVo(); String routerPath = SysMenu.innerLinkReplaceEach(menu.getPath()); + String innerLinkName = StringUtils.capitalize(routerPath) + menu.getMenuId(); children.setPath(routerPath); children.setComponent(UserConstants.INNER_LINK); - children.setName(StringUtils.capitalize(routerPath)); + children.setName(innerLinkName); children.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), menu.getPath())); childrenList.add(children); router.setChildren(childrenList); diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysNoticeServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysNoticeServiceImpl.java index 18b7a08..db63e61 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysNoticeServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysNoticeServiceImpl.java @@ -119,6 +119,6 @@ */ @Override public int deleteNoticeByIds(Long[] noticeIds) { - return baseMapper.deleteBatchIds(Arrays.asList(noticeIds)); + return baseMapper.deleteByIds(Arrays.asList(noticeIds)); } } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOperLogServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOperLogServiceImpl.java index 2a76b82..b78b9dc 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOperLogServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOperLogServiceImpl.java @@ -122,7 +122,7 @@ */ @Override public int deleteOperLogByIds(Long[] operIds) { - return baseMapper.deleteBatchIds(Arrays.asList(operIds)); + return baseMapper.deleteByIds(Arrays.asList(operIds)); } /** diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssConfigServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssConfigServiceImpl.java index 2ecd592..a1eefce 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssConfigServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssConfigServiceImpl.java @@ -135,7 +135,7 @@ SysOssConfig config = baseMapper.selectById(configId); list.add(config); } - boolean flag = baseMapper.deleteBatchIds(ids) > 0; + boolean flag = baseMapper.deleteByIds(ids) > 0; if (flag) { list.forEach(sysOssConfig -> CacheUtils.evict(CacheNames.SYS_OSS_CONFIG, sysOssConfig.getConfigKey())); diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java index aa094b2..d167e8d 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java @@ -247,7 +247,7 @@ OssClient storage = OssFactory.instance(sysOss.getService()); storage.delete(sysOss.getUrl()); } - return baseMapper.deleteBatchIds(ids) > 0; + return baseMapper.deleteByIds(ids) > 0; } /** diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysPostServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysPostServiceImpl.java index 17cd5ca..b8a7e60 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysPostServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysPostServiceImpl.java @@ -202,7 +202,7 @@ throw new ServiceException(String.format("%1$s宸插垎閰嶏紝涓嶈兘鍒犻櫎!", post.getPostName())); } } - return baseMapper.deleteBatchIds(Arrays.asList(postIds)); + return baseMapper.deleteByIds(Arrays.asList(postIds)); } /** diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysRoleServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysRoleServiceImpl.java index abd294f..31f9498 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysRoleServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysRoleServiceImpl.java @@ -102,14 +102,13 @@ */ @Override public List<SysRoleVo> selectRolesAuthByUserId(Long userId) { - List<SysRoleVo> userRoles = baseMapper.selectRolePermissionByUserId(userId); + List<SysRoleVo> userRoles = baseMapper.selectRolesByUserId(userId); List<SysRoleVo> roles = selectRoleAll(); + // 浣跨敤HashSet鎻愰珮鏌ユ壘鏁堢巼 + Set<Long> userRoleIds = StreamUtils.toSet(userRoles, SysRoleVo::getRoleId); for (SysRoleVo role : roles) { - for (SysRoleVo userRole : userRoles) { - if (role.getRoleId().longValue() == userRole.getRoleId().longValue()) { - role.setFlag(true); - break; - } + if (userRoleIds.contains(role.getRoleId())) { + role.setFlag(true); } } return roles; @@ -123,7 +122,7 @@ */ @Override public Set<String> selectRolePermissionByUserId(Long userId) { - List<SysRoleVo> perms = baseMapper.selectRolePermissionByUserId(userId); + List<SysRoleVo> perms = baseMapper.selectRolesByUserId(userId); Set<String> permsSet = new HashSet<>(); for (SysRoleVo perm : perms) { if (ObjectUtil.isNotNull(perm)) { @@ -417,7 +416,7 @@ roleMenuMapper.delete(new LambdaQueryWrapper<SysRoleMenu>().in(SysRoleMenu::getRoleId, ids)); // 鍒犻櫎瑙掕壊涓庨儴闂ㄥ叧鑱� roleDeptMapper.delete(new LambdaQueryWrapper<SysRoleDept>().in(SysRoleDept::getRoleId, ids)); - return baseMapper.deleteBatchIds(ids); + return baseMapper.deleteByIds(ids); } /** diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantPackageServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantPackageServiceImpl.java index f7f8d46..5fd04af 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantPackageServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantPackageServiceImpl.java @@ -140,6 +140,6 @@ throw new ServiceException("绉熸埛濂楅宸茶浣跨敤"); } } - return baseMapper.deleteBatchIds(ids) > 0; + return baseMapper.deleteByIds(ids) > 0; } } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantServiceImpl.java index 516149f..d30750d 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantServiceImpl.java @@ -294,7 +294,7 @@ throw new ServiceException("瓒呯绉熸埛涓嶈兘鍒犻櫎"); } } - return baseMapper.deleteBatchIds(ids) > 0; + return baseMapper.deleteByIds(ids) > 0; } /** diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java index d8f481d..3cb4159 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java @@ -99,7 +99,7 @@ w.in("u.dept_id", ids); }).orderByAsc("u.user_id"); if (StringUtils.isNotBlank(user.getExcludeUserIds())) { - wrapper.notIn("u.user_id", StringUtils.splitList(user.getExcludeUserIds())); + wrapper.notIn("u.user_id", StringUtils.splitTo(user.getExcludeUserIds(), Convert::toLong)); } return wrapper; } @@ -541,7 +541,7 @@ // 鍒犻櫎鐢ㄦ埛涓庡矖浣嶈〃 userPostMapper.delete(new LambdaQueryWrapper<SysUserPost>().in(SysUserPost::getUserId, ids)); // 闃叉鏇存柊澶辫触瀵艰嚧鐨勬暟鎹垹闄� - int flag = baseMapper.deleteBatchIds(ids); + int flag = baseMapper.deleteByIds(ids); if (flag < 1) { throw new ServiceException("鍒犻櫎鐢ㄦ埛澶辫触!"); } diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml index fad1812..9dd3f2e 100644 --- a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml +++ b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml @@ -11,9 +11,8 @@ select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.query_param, m.visible, m.status, m.perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time from sys_menu m - left join sys_role_menu rm on m.menu_id = rm.menu_id - left join sys_user_role sur on rm.role_id = sur.role_id - left join sys_role ro on sur.role_id = ro.role_id + left join sys_role_menu rm on m.menu_id = rm.menu_id + left join sys_role r on rm.role_id = r.role_id ${ew.getCustomSqlSegment} </select> @@ -34,14 +33,10 @@ m.order_num, m.create_time from sys_menu m - left join sys_role_menu rm on m.menu_id = rm.menu_id - left join sys_user_role sur on rm.role_id = sur.role_id - left join sys_role ro on sur.role_id = ro.role_id - left join sys_user u on sur.user_id = u.user_id - where u.user_id = #{userId} - and m.menu_type in ('M', 'C') - and m.status = '0' - and ro.status = '0' + left join sys_role_menu rm on m.menu_id = rm.menu_id and m.status = '0' + left join sys_role r on rm.role_id = r.role_id and r.status = '0' + where m.menu_type in ('M', 'C') + and r.role_id in (select role_id from sys_user_role where user_id = #{userId}) order by m.parent_id, m.order_num </select> @@ -57,22 +52,12 @@ order by m.parent_id, m.order_num </select> - <select id="selectMenuPerms" resultType="String"> - select distinct m.perms - from sys_menu m - left join sys_role_menu rm on m.menu_id = rm.menu_id - left join sys_user_role sur on rm.role_id = sur.role_id - </select> - <select id="selectMenuPermsByUserId" parameterType="Long" resultType="String"> select distinct m.perms from sys_menu m - left join sys_role_menu rm on m.menu_id = rm.menu_id - left join sys_user_role sur on rm.role_id = sur.role_id - left join sys_role r on r.role_id = sur.role_id - where m.status = '0' - and r.status = '0' - and sur.user_id = #{userId} + left join sys_role_menu rm on m.menu_id = rm.menu_id and m.status = '0' + left join sys_role r on r.role_id = rm.role_id and r.status = '0' + where r.role_id in (select role_id from sys_user_role where user_id = #{userId}) </select> <select id="selectMenuPermsByRoleId" parameterType="Long" resultType="String"> diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml index 7b8bba7..4ef7b1e 100644 --- a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml +++ b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml @@ -48,9 +48,7 @@ r.data_scope, r.status from sys_role r - left join sys_user_role sur on sur.role_id = r.role_id - left join sys_user u on u.user_id = sur.user_id - WHERE r.del_flag = '0' and sur.user_id = #{userId} + WHERE r.del_flag = '0' and r.role_id in (select role_id from sys_user_role where user_id = #{userId}) </select> <select id="selectRoleById" resultMap="SysRoleResult"> diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/DeleteSequenceMultiInstanceCmd.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/DeleteSequenceMultiInstanceCmd.java index 6773eef..a61daeb 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/DeleteSequenceMultiInstanceCmd.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/DeleteSequenceMultiInstanceCmd.java @@ -2,6 +2,7 @@ import cn.hutool.core.util.ObjectUtil; import lombok.AllArgsConstructor; +import org.dromara.common.core.utils.StreamUtils; import org.flowable.common.engine.impl.interceptor.Command; import org.flowable.common.engine.impl.interceptor.CommandContext; import org.flowable.engine.impl.persistence.entity.ExecutionEntity; @@ -59,7 +60,7 @@ } List<Long> userIdList = new ArrayList<>(); userIds.forEach(e -> { - Long userId = assignees.stream().filter(id -> ObjectUtil.equals(id, e)).findFirst().orElse(null); + Long userId = StreamUtils.findFirst(assignees, id -> ObjectUtil.equals(id, e)); if (userId == null) { userIdList.add(e); } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessInstanceServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessInstanceServiceImpl.java index b833bcc..e22e800 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessInstanceServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessInstanceServiceImpl.java @@ -9,6 +9,7 @@ import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; +import org.dromara.common.core.enums.BusinessStatusEnum; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.service.UserService; import org.dromara.common.core.utils.StreamUtils; @@ -17,7 +18,6 @@ import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.workflow.common.constant.FlowConstant; -import org.dromara.common.core.enums.BusinessStatusEnum; import org.dromara.workflow.common.enums.TaskStatusEnum; import org.dromara.workflow.domain.ActHiProcinst; import org.dromara.workflow.domain.bo.ProcessInstanceBo; @@ -34,7 +34,7 @@ import org.dromara.workflow.service.IWfTaskBackNodeService; import org.dromara.workflow.utils.QueryUtils; import org.dromara.workflow.utils.WorkflowUtils; -import org.flowable.bpmn.model.*; +import org.flowable.bpmn.model.BpmnModel; import org.flowable.engine.*; import org.flowable.engine.history.HistoricActivityInstance; import org.flowable.engine.history.HistoricProcessInstance; @@ -57,7 +57,6 @@ import java.nio.charset.StandardCharsets; import java.util.List; import java.util.*; -import java.util.stream.Collectors; /** * 娴佺▼瀹炰緥 鏈嶅姟灞傚疄鐜� @@ -257,23 +256,23 @@ List<HistoricActivityInstance> highLightedFlowList = QueryUtils.hisActivityInstanceQuery(processInstanceId).orderByHistoricActivityInstanceStartTime().asc().list(); for (HistoricActivityInstance tempActivity : highLightedFlowList) { Map<String, Object> task = new HashMap<>(); - if (!FlowConstant.SEQUENCE_FLOW.equals(tempActivity.getActivityType()) && - !FlowConstant.PARALLEL_GATEWAY.equals(tempActivity.getActivityType()) && - !FlowConstant.EXCLUSIVE_GATEWAY.equals(tempActivity.getActivityType()) && - !FlowConstant.INCLUSIVE_GATEWAY.equals(tempActivity.getActivityType()) - ) { - task.put("key", tempActivity.getActivityId()); - task.put("completed", tempActivity.getEndTime() != null); - task.put("activityType", tempActivity.getActivityType()); - taskList.add(task); + switch (tempActivity.getActivityType()) { + case FlowConstant.SEQUENCE_FLOW, FlowConstant.PARALLEL_GATEWAY, + FlowConstant.EXCLUSIVE_GATEWAY, FlowConstant.INCLUSIVE_GATEWAY -> {} + default -> { + task.put("key", tempActivity.getActivityId()); + task.put("completed", tempActivity.getEndTime() != null); + task.put("activityType", tempActivity.getActivityType()); + taskList.add(task); + } } } ProcessInstance processInstance = QueryUtils.instanceQuery(processInstanceId).singleResult(); if (processInstance != null) { - taskList = taskList.stream().filter(e -> !e.get("activityType").equals(FlowConstant.END_EVENT)).collect(Collectors.toList()); + taskList = StreamUtils.filter(taskList, e -> !e.get("activityType").equals(FlowConstant.END_EVENT)); } //鏌ヨ鍑鸿繍琛屼腑鑺傜偣 - List<Map<String, Object>> runtimeNodeList = taskList.stream().filter(e -> !(Boolean) e.get("completed")).collect(Collectors.toList()); + List<Map<String, Object>> runtimeNodeList = StreamUtils.filter(taskList, e -> !(Boolean) e.get("completed")); if (CollUtil.isNotEmpty(runtimeNodeList)) { Iterator<Map<String, Object>> iterator = taskList.iterator(); while (iterator.hasNext()) { @@ -389,7 +388,7 @@ } //闄勪欢 if (CollUtil.isNotEmpty(attachmentList)) { - List<Attachment> attachments = attachmentList.stream().filter(e -> e.getTaskId().equals(historicTaskInstance.getId())).collect(Collectors.toList()); + List<Attachment> attachments = StreamUtils.filter(attachmentList, e -> e.getTaskId().equals(historicTaskInstance.getId())); if (CollUtil.isNotEmpty(attachments)) { actHistoryInfoVo.setAttachmentList(attachments); } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java index 6fe0b4e..32e6aec 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java @@ -260,7 +260,8 @@ String userId = String.valueOf(LoginHelper.getUserId()); queryWrapper.eq("t.business_status_", BusinessStatusEnum.WAITING.getStatus()); queryWrapper.eq(TenantHelper.isEnable(), "t.tenant_id_", TenantHelper.getTenantId()); - queryWrapper.and(w1 -> w1.eq("t.assignee_", userId).or(w2 -> w2.isNull("t.assignee_").apply("exists ( select LINK.ID_ from ACT_RU_IDENTITYLINK LINK where LINK.TASK_ID_ = t.ID_ and LINK.TYPE_ = 'candidate' " + "and (LINK.USER_ID_ = {0} or ( LINK.GROUP_ID_ IN " + getInParam(roleIds) + " ) ))", userId))); + String ids = StreamUtils.join(roleIds, x -> "'" + x + "'"); + queryWrapper.and(w1 -> w1.eq("t.assignee_", userId).or(w2 -> w2.isNull("t.assignee_").apply("exists ( select LINK.ID_ from ACT_RU_IDENTITYLINK LINK where LINK.TASK_ID_ = t.ID_ and LINK.TYPE_ = 'candidate' and (LINK.USER_ID_ = {0} or ( LINK.GROUP_ID_ IN ({1}) ) ))", userId, ids))); if (StringUtils.isNotBlank(taskBo.getName())) { queryWrapper.like("t.name_", taskBo.getName()); } @@ -287,19 +288,6 @@ } } return TableDataInfo.build(page); - } - - private String getInParam(List<String> param) { - StringBuilder sb = new StringBuilder(); - sb.append("("); - for (int i = 0; i < param.size(); i++) { - sb.append("'").append(param.get(i)).append("'"); - if (i != param.size() - 1) { - sb.append(","); - } - } - sb.append(")"); - return sb.toString(); } /** @@ -696,7 +684,7 @@ if (multiInstance == null && taskList.size() > 1) { List<Task> tasks = StreamUtils.filter(taskList, e -> !e.getTaskDefinitionKey().equals(task.getTaskDefinitionKey())); if (CollUtil.isNotEmpty(tasks)) { - actHiTaskinstMapper.deleteBatchIds(StreamUtils.toList(tasks, Task::getId)); + actHiTaskinstMapper.deleteByIds(StreamUtils.toList(tasks, Task::getId)); } } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/TestLeaveServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/TestLeaveServiceImpl.java index 13a1bb2..a62ce5f 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/TestLeaveServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/TestLeaveServiceImpl.java @@ -111,7 +111,7 @@ public Boolean deleteWithValidByIds(Collection<Long> ids) { List<String> idList = StreamUtils.toList(ids, String::valueOf); workflowService.deleteRunAndHisInstance(idList); - return baseMapper.deleteBatchIds(ids) > 0; + return baseMapper.deleteByIds(ids) > 0; } /** diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfCategoryServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfCategoryServiceImpl.java index c5cb288..b498262 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfCategoryServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfCategoryServiceImpl.java @@ -114,7 +114,7 @@ if (isValid) { //TODO 鍋氫竴浜涗笟鍔′笂鐨勬牎楠�,鍒ゆ柇鏄惁闇�瑕佹牎楠� } - return baseMapper.deleteBatchIds(ids) > 0; + return baseMapper.deleteByIds(ids) > 0; } /** diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfDefinitionConfigServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfDefinitionConfigServiceImpl.java index 9478825..ab55ff8 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfDefinitionConfigServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfDefinitionConfigServiceImpl.java @@ -107,7 +107,7 @@ */ @Override public Boolean deleteByIds(Collection<Long> ids) { - return baseMapper.deleteBatchIds(ids) > 0; + return baseMapper.deleteByIds(ids) > 0; } @Override diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfFormManageServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfFormManageServiceImpl.java index e0850d7..da2e777 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfFormManageServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfFormManageServiceImpl.java @@ -106,6 +106,6 @@ */ @Override public Boolean deleteByIds(Collection<Long> ids) { - return baseMapper.deleteBatchIds(ids) > 0; + return baseMapper.deleteByIds(ids) > 0; } } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfNodeConfigServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfNodeConfigServiceImpl.java index c677102..2f71482 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfNodeConfigServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfNodeConfigServiceImpl.java @@ -50,7 +50,7 @@ */ @Override public Boolean deleteByIds(Collection<Long> ids) { - return baseMapper.deleteBatchIds(ids) > 0; + return baseMapper.deleteByIds(ids) > 0; } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfTaskBackNodeServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfTaskBackNodeServiceImpl.java index 55d9883..6c255d3 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfTaskBackNodeServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfTaskBackNodeServiceImpl.java @@ -6,6 +6,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.exception.ServiceException; +import org.dromara.common.core.utils.StreamUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.workflow.domain.WfTaskBackNode; @@ -56,7 +57,7 @@ wfTaskBackNode.setOrderNo(0); wfTaskBackNodeMapper.insert(wfTaskBackNode); } else { - WfTaskBackNode taskNode = list.stream().filter(e -> e.getNodeId().equals(wfTaskBackNode.getNodeId()) && e.getOrderNo() == 0).findFirst().orElse(null); + WfTaskBackNode taskNode = StreamUtils.findFirst(list, e -> e.getNodeId().equals(wfTaskBackNode.getNodeId()) && e.getOrderNo() == 0); if (ObjectUtil.isEmpty(taskNode)) { wfTaskBackNode.setOrderNo(list.get(0).getOrderNo() + 1); WfTaskBackNode node = getListByInstanceIdAndNodeId(wfTaskBackNode.getInstanceId(), wfTaskBackNode.getNodeId()); @@ -106,7 +107,7 @@ } } if (CollUtil.isNotEmpty(ids)) { - wfTaskBackNodeMapper.deleteBatchIds(ids); + wfTaskBackNodeMapper.deleteByIds(ids); } } return true; diff --git a/script/docker/docker-compose.yml b/script/docker/docker-compose.yml index 97024a0..b4f96aa 100644 --- a/script/docker/docker-compose.yml +++ b/script/docker/docker-compose.yml @@ -100,7 +100,7 @@ network_mode: "host" ruoyi-server1: - image: ruoyi/ruoyi-server:5.2.0 + image: ruoyi/ruoyi-server:5.2.1 container_name: ruoyi-server1 environment: # 鏃跺尯涓婃捣 @@ -115,7 +115,7 @@ network_mode: "host" ruoyi-server2: - image: ruoyi/ruoyi-server:5.2.0 + image: ruoyi/ruoyi-server:5.2.1 container_name: ruoyi-server2 environment: # 鏃跺尯涓婃捣 @@ -130,7 +130,7 @@ network_mode: "host" ruoyi-monitor-admin: - image: ruoyi/ruoyi-monitor-admin:5.2.0 + image: ruoyi/ruoyi-monitor-admin:5.2.1 container_name: ruoyi-monitor-admin environment: # 鏃跺尯涓婃捣 @@ -142,14 +142,14 @@ network_mode: "host" ruoyi-snailjob-server: - image: ruoyi/ruoyi-snailjob-server:5.2.0 + image: ruoyi/ruoyi-snailjob-server:5.2.1 container_name: ruoyi-snailjob-server environment: # 鏃跺尯涓婃捣 TZ: Asia/Shanghai ports: - "8800:8800" - - "1788:1788" + - "17888:17888" volumes: - /docker/snailjob/logs/:/ruoyi/snailjob/logs privileged: true diff --git a/script/docker/nginx/conf/nginx.conf b/script/docker/nginx/conf/nginx.conf index dcc4525..a6fc073 100644 --- a/script/docker/nginx/conf/nginx.conf +++ b/script/docker/nginx/conf/nginx.conf @@ -63,7 +63,7 @@ # } # 闄愬埗澶栫綉璁块棶鍐呯綉 actuator 鐩稿叧璺緞 - location ~ ^(/[^/]*)?/actuator(/.*)?$ { + location ~ ^(/[^/]*)?/actuator.*(/.*)?$ { return 403; } diff --git a/script/sql/postgres/flowable.sql b/script/sql/postgres/flowable.sql index 6e75e4b..8a6078d 100644 --- a/script/sql/postgres/flowable.sql +++ b/script/sql/postgres/flowable.sql @@ -39,29 +39,17 @@ ); comment on table test_leave is '璇峰亣鐢宠琛�'; - comment on column test_leave.id is '涓婚敭'; - comment on column test_leave.leave_type is '璇峰亣绫诲瀷'; - comment on column test_leave.start_date is '寮�濮嬫椂闂�'; - comment on column test_leave.end_date is '缁撴潫鏃堕棿'; - comment on column test_leave.remark is '璇峰亣鍘熷洜'; - comment on column test_leave.status is '鐘舵��'; - comment on column test_leave.create_dept is '鍒涘缓閮ㄩ棬'; - comment on column test_leave.create_by is '鍒涘缓鑰�'; - comment on column test_leave.create_time is '鍒涘缓鏃堕棿'; - comment on column test_leave.update_by is '鏇存柊鑰�'; - comment on column test_leave.update_time is '鏇存柊鏃堕棿'; - comment on column test_leave.tenant_id is '绉熸埛缂栫爜'; alter table test_leave @@ -86,27 +74,16 @@ ); comment on table wf_category is '娴佺▼鍒嗙被'; - comment on column wf_category.id is '涓婚敭'; - comment on column wf_category.category_name is '鍒嗙被鍚嶇О'; - comment on column wf_category.category_code is '鍒嗙被缂栫爜'; - comment on column wf_category.parent_id is '鐖剁骇id'; - comment on column wf_category.sort_num is '鎺掑簭'; - comment on column wf_category.tenant_id is '绉熸埛id'; - comment on column wf_category.create_dept is '鍒涘缓閮ㄩ棬'; - comment on column wf_category.create_by is '鍒涘缓鑰�'; - comment on column wf_category.create_time is '鍒涘缓鏃堕棿'; - comment on column wf_category.update_by is '淇敼鑰�'; - comment on column wf_category.update_time is '淇敼鏃堕棿'; alter table wf_category @@ -137,31 +114,18 @@ ); comment on table wf_task_back_node is '鑺傜偣瀹℃壒璁板綍'; - comment on column wf_task_back_node.id is '涓婚敭'; - comment on column wf_task_back_node.node_id is '鑺傜偣id'; - comment on column wf_task_back_node.node_name is '鑺傜偣鍚嶇О'; - comment on column wf_task_back_node.order_no is '鎺掑簭'; - comment on column wf_task_back_node.instance_id is '娴佺▼瀹炰緥id'; - comment on column wf_task_back_node.task_type is '鑺傜偣绫诲瀷'; - comment on column wf_task_back_node.assignee is '瀹℃壒浜�'; - comment on column wf_task_back_node.tenant_id is '绉熸埛id'; - comment on column wf_task_back_node.create_dept is '鍒涘缓閮ㄩ棬'; - comment on column wf_task_back_node.create_by is '鍒涘缓鑰�'; - comment on column wf_task_back_node.create_time is '鍒涘缓鏃堕棿'; - comment on column wf_task_back_node.update_by is '淇敼鑰�'; - comment on column wf_task_back_node.update_time is '淇敼鏃堕棿'; alter table wf_task_back_node @@ -177,6 +141,7 @@ process_key varchar(255) not null, version bigint not null, tenant_id varchar(20), + remark varchar(500), create_dept bigint, create_by bigint, create_time timestamp, @@ -185,27 +150,17 @@ ); comment on table wf_definition_config is '娴佺▼瀹氫箟閰嶇疆'; - comment on column wf_definition_config.id is '涓婚敭'; - comment on column wf_definition_config.table_name is '琛ㄥ悕'; - comment on column wf_definition_config.definition_id is '娴佺▼瀹氫箟ID'; - comment on column wf_definition_config.process_key is '娴佺▼KEY'; - comment on column wf_definition_config.version is '娴佺▼鐗堟湰'; - comment on column wf_definition_config.tenant_id is '绉熸埛id'; - +comment on column wf_definition_config.remark is '澶囨敞'; comment on column wf_definition_config.create_dept is '鍒涘缓閮ㄩ棬'; - comment on column wf_definition_config.create_by is '鍒涘缓鑰�'; - comment on column wf_definition_config.create_time is '鍒涘缓鏃堕棿'; - comment on column wf_definition_config.update_by is '淇敼鑰�'; - comment on column wf_definition_config.update_time is '淇敼鏃堕棿'; alter table wf_definition_config @@ -231,27 +186,16 @@ ); comment on table wf_form_manage is '琛ㄥ崟绠$悊'; - comment on column wf_form_manage.id is '涓婚敭'; - comment on column wf_form_manage.form_name is '琛ㄥ崟鍚嶇О'; - comment on column wf_form_manage.form_type is '琛ㄥ崟绫诲瀷'; - comment on column wf_form_manage.router is '璺敱鍦板潃/琛ㄥ崟ID'; - comment on column wf_form_manage.remark is '澶囨敞'; - comment on column wf_form_manage.tenant_id is '绉熸埛id'; - comment on column wf_form_manage.create_dept is '鍒涘缓閮ㄩ棬'; - comment on column wf_form_manage.create_by is '鍒涘缓鑰�'; - comment on column wf_form_manage.create_time is '鍒涘缓鏃堕棿'; - comment on column wf_form_manage.update_by is '淇敼鑰�'; - comment on column wf_form_manage.update_time is '淇敼鏃堕棿'; insert into wf_form_manage(id, form_name, form_type, router, remark, tenant_id, create_dept, create_by, create_time, update_by, update_time) VALUES (1, '璇峰亣鐢宠', 'static', '/workflow/leaveEdit/index', NULL, '000000', 103, 1, now(), 1, now()); @@ -276,31 +220,18 @@ ); comment on table wf_node_config is '鑺傜偣閰嶇疆'; - comment on column wf_node_config.id is '涓婚敭'; - comment on column wf_node_config.form_id is '琛ㄥ崟id'; - comment on column wf_node_config.form_type is '琛ㄥ崟绫诲瀷'; - comment on column wf_node_config.node_id is '鑺傜偣id'; - comment on column wf_node_config.node_name is '鑺傜偣鍚嶇О'; - comment on column wf_node_config.definition_id is '娴佺▼瀹氫箟id'; - comment on column wf_node_config.apply_user_task is '鏄惁涓虹敵璇蜂汉鑺傜偣 锛�0鏄� 1鍚︼級'; - comment on column wf_node_config.tenant_id is '绉熸埛id'; - comment on column wf_node_config.create_dept is '鍒涘缓閮ㄩ棬'; - comment on column wf_node_config.create_by is '鍒涘缓鑰�'; - comment on column wf_node_config.create_time is '鍒涘缓鏃堕棿'; - comment on column wf_node_config.update_by is '淇敼鑰�'; - comment on column wf_node_config.update_time is '淇敼鏃堕棿'; INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) VALUES (11638, '璇峰亣鐢宠', 5, 1, 'leave', 'workflow/leave/index', 1, 0, 'C', '0', '0', 'workflow:leave:list', '#', 103, 1, now(), NULL, NULL, '璇峰亣鐢宠鑿滃崟'); -- Gitblit v1.9.3