Commit 5fcd0a21dad77a14bfce1cdfb52f0aa45731af21

Authored by YunaiV
2 parents ba59ec85 ee53d2ad

Merge branch 'master' of https://gitee.com/zhijiantianya/ruoyi-vue-pro into feature/mall_product

README.md
@@ -248,7 +248,7 @@ @@ -248,7 +248,7 @@
248 248
249 | 框架 | 说明 | 版本 | 学习指南 | 249 | 框架 | 说明 | 版本 | 学习指南 |
250 |---------------------------------------------------------------------------------------------|------------------|-------------|----------------------------------------------------------------| 250 |---------------------------------------------------------------------------------------------|------------------|-------------|----------------------------------------------------------------|
251 -| [Spring Boot](https://spring.io/projects/spring-boot) | 应用开发框架 | 2.7.13 | [文档](https://github.com/YunaiV/SpringBoot-Labs) | 251 +| [Spring Boot](https://spring.io/projects/spring-boot) | 应用开发框架 | 2.7.14 | [文档](https://github.com/YunaiV/SpringBoot-Labs) |
252 | [MySQL](https://www.mysql.com/cn/) | 数据库服务器 | 5.7 / 8.0+ | | 252 | [MySQL](https://www.mysql.com/cn/) | 数据库服务器 | 5.7 / 8.0+ | |
253 | [Druid](https://github.com/alibaba/druid) | JDBC 连接池、监控组件 | 1.2.18 | [文档](http://www.iocoder.cn/Spring-Boot/datasource-pool/?yudao) | 253 | [Druid](https://github.com/alibaba/druid) | JDBC 连接池、监控组件 | 1.2.18 | [文档](http://www.iocoder.cn/Spring-Boot/datasource-pool/?yudao) |
254 | [MyBatis Plus](https://mp.baomidou.com/) | MyBatis 增强工具包 | 3.5.3.1 | [文档](http://www.iocoder.cn/Spring-Boot/MyBatis/?yudao) | 254 | [MyBatis Plus](https://mp.baomidou.com/) | MyBatis 增强工具包 | 3.5.3.1 | [文档](http://www.iocoder.cn/Spring-Boot/MyBatis/?yudao) |
@@ -39,7 +39,7 @@ @@ -39,7 +39,7 @@
39 <maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version> 39 <maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version>
40 <!-- 看看咋放到 bom 里 --> 40 <!-- 看看咋放到 bom 里 -->
41 <lombok.version>1.18.28</lombok.version> 41 <lombok.version>1.18.28</lombok.version>
42 - <spring.boot.version>2.7.13</spring.boot.version> 42 + <spring.boot.version>2.7.14</spring.boot.version>
43 <mapstruct.version>1.5.5.Final</mapstruct.version> 43 <mapstruct.version>1.5.5.Final</mapstruct.version>
44 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 44 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
45 </properties> 45 </properties>
sql/postgresql/ruoyi-vue-pro.sql
@@ -5552,7 +5552,7 @@ CREATE TABLE &quot;system_role&quot; @@ -5552,7 +5552,7 @@ CREATE TABLE &quot;system_role&quot;
5552 "code" varchar(100) COLLATE "pg_catalog"."default" NOT NULL, 5552 "code" varchar(100) COLLATE "pg_catalog"."default" NOT NULL,
5553 "sort" int4 NOT NULL, 5553 "sort" int4 NOT NULL,
5554 "data_scope" int2 NOT NULL, 5554 "data_scope" int2 NOT NULL,
5555 - "data_scope_dept_ids" varchar(500) COLLATE "pg_catalog"."default" NOT NULL, 5555 + "data_scope_dept_ids" varchar(500) COLLATE "pg_catalog"."default" NOT NULL DEFAULT '',
5556 "status" int2 NOT NULL, 5556 "status" int2 NOT NULL,
5557 "type" int2 NOT NULL, 5557 "type" int2 NOT NULL,
5558 "remark" varchar(500) COLLATE "pg_catalog"."default", 5558 "remark" varchar(500) COLLATE "pg_catalog"."default",
yudao-dependencies/pom.xml
@@ -16,7 +16,7 @@ @@ -16,7 +16,7 @@
16 <properties> 16 <properties>
17 <revision>1.8.0-snapshot</revision> 17 <revision>1.8.0-snapshot</revision>
18 <!-- 统一依赖管理 --> 18 <!-- 统一依赖管理 -->
19 - <spring.boot.version>2.7.13</spring.boot.version> 19 + <spring.boot.version>2.7.14</spring.boot.version>
20 <!-- Web 相关 --> 20 <!-- Web 相关 -->
21 <springdoc.version>1.6.15</springdoc.version> 21 <springdoc.version>1.6.15</springdoc.version>
22 <knife4j.version>4.1.0</knife4j.version> 22 <knife4j.version>4.1.0</knife4j.version>
@@ -43,7 +43,7 @@ @@ -43,7 +43,7 @@
43 <!-- Bpm 工作流相关 --> 43 <!-- Bpm 工作流相关 -->
44 <flowable.version>6.8.0</flowable.version> 44 <flowable.version>6.8.0</flowable.version>
45 <!-- 工具类相关 --> 45 <!-- 工具类相关 -->
46 - <captcha-plus.version>1.0.5</captcha-plus.version> 46 + <captcha-plus.version>1.0.6</captcha-plus.version>
47 <jsoup.version>1.15.4</jsoup.version> 47 <jsoup.version>1.15.4</jsoup.version>
48 <lombok.version>1.18.28</lombok.version> 48 <lombok.version>1.18.28</lombok.version>
49 <mapstruct.version>1.5.5.Final</mapstruct.version> 49 <mapstruct.version>1.5.5.Final</mapstruct.version>
@@ -68,7 +68,7 @@ @@ -68,7 +68,7 @@
68 <aliyun-java-sdk-core.version>4.6.3</aliyun-java-sdk-core.version> 68 <aliyun-java-sdk-core.version>4.6.3</aliyun-java-sdk-core.version>
69 <aliyun-java-sdk-dysmsapi.version>2.2.1</aliyun-java-sdk-dysmsapi.version> 69 <aliyun-java-sdk-dysmsapi.version>2.2.1</aliyun-java-sdk-dysmsapi.version>
70 <tencentcloud-sdk-java.version>3.1.758</tencentcloud-sdk-java.version> 70 <tencentcloud-sdk-java.version>3.1.758</tencentcloud-sdk-java.version>
71 - <justauth.version>1.0.1</justauth.version> 71 + <justauth.version>1.0.3</justauth.version>
72 <jimureport.version>1.5.8</jimureport.version> 72 <jimureport.version>1.5.8</jimureport.version>
73 <xercesImpl.version>2.12.2</xercesImpl.version> 73 <xercesImpl.version>2.12.2</xercesImpl.version>
74 <weixin-java.version>4.5.0</weixin-java.version> 74 <weixin-java.version>4.5.0</weixin-java.version>
yudao-example/yudao-sso-demo-by-code/pom.xml
@@ -21,7 +21,7 @@ @@ -21,7 +21,7 @@
21 <maven.compiler.target>8</maven.compiler.target> 21 <maven.compiler.target>8</maven.compiler.target>
22 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 22 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
23 <!-- 统一依赖管理 --> 23 <!-- 统一依赖管理 -->
24 - <spring.boot.version>2.7.13</spring.boot.version> 24 + <spring.boot.version>2.7.14</spring.boot.version>
25 </properties> 25 </properties>
26 26
27 <dependencyManagement> 27 <dependencyManagement>
yudao-example/yudao-sso-demo-by-password/pom.xml
@@ -21,7 +21,7 @@ @@ -21,7 +21,7 @@
21 <maven.compiler.target>8</maven.compiler.target> 21 <maven.compiler.target>8</maven.compiler.target>
22 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 22 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
23 <!-- 统一依赖管理 --> 23 <!-- 统一依赖管理 -->
24 - <spring.boot.version>2.7.13</spring.boot.version> 24 + <spring.boot.version>2.7.14</spring.boot.version>
25 </properties> 25 </properties>
26 26
27 <dependencyManagement> 27 <dependencyManagement>
yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/weixin/WxAppPayClient.java
@@ -53,7 +53,7 @@ public class WxAppPayClient extends AbstractWxPayClient { @@ -53,7 +53,7 @@ public class WxAppPayClient extends AbstractWxPayClient {
53 // 构建 WxPayUnifiedOrderV3Request 对象 53 // 构建 WxPayUnifiedOrderV3Request 对象
54 WxPayUnifiedOrderV3Request request = buildPayUnifiedOrderRequestV3(reqDTO); 54 WxPayUnifiedOrderV3Request request = buildPayUnifiedOrderRequestV3(reqDTO);
55 // 执行请求 55 // 执行请求
56 - WxPayUnifiedOrderV3Result.JsapiResult response = client.createOrderV3(TradeTypeEnum.APP, request); 56 + WxPayUnifiedOrderV3Result.AppResult response = client.createOrderV3(TradeTypeEnum.APP, request);
57 57
58 // 转换结果 58 // 转换结果
59 return PayOrderRespDTO.waitingOf(PayOrderDisplayModeEnum.APP.getMode(), toJsonString(response), 59 return PayOrderRespDTO.waitingOf(PayOrderDisplayModeEnum.APP.getMode(), toJsonString(response),
yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/config/YudaoTenantAutoConfiguration.java
@@ -4,6 +4,7 @@ import cn.hutool.core.annotation.AnnotationUtil; @@ -4,6 +4,7 @@ import cn.hutool.core.annotation.AnnotationUtil;
4 import cn.iocoder.yudao.framework.common.enums.WebFilterOrderEnum; 4 import cn.iocoder.yudao.framework.common.enums.WebFilterOrderEnum;
5 import cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils; 5 import cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils;
6 import cn.iocoder.yudao.framework.quartz.core.handler.JobHandler; 6 import cn.iocoder.yudao.framework.quartz.core.handler.JobHandler;
  7 +import cn.iocoder.yudao.framework.redis.config.YudaoCacheProperties;
7 import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnoreAspect; 8 import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnoreAspect;
8 import cn.iocoder.yudao.framework.tenant.core.db.TenantDatabaseInterceptor; 9 import cn.iocoder.yudao.framework.tenant.core.db.TenantDatabaseInterceptor;
9 import cn.iocoder.yudao.framework.tenant.core.job.TenantJob; 10 import cn.iocoder.yudao.framework.tenant.core.job.TenantJob;
@@ -27,6 +28,7 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties @@ -27,6 +28,7 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties
27 import org.springframework.boot.web.servlet.FilterRegistrationBean; 28 import org.springframework.boot.web.servlet.FilterRegistrationBean;
28 import org.springframework.context.annotation.Bean; 29 import org.springframework.context.annotation.Bean;
29 import org.springframework.context.annotation.Primary; 30 import org.springframework.context.annotation.Primary;
  31 +import org.springframework.data.redis.cache.BatchStrategies;
30 import org.springframework.data.redis.cache.RedisCacheConfiguration; 32 import org.springframework.data.redis.cache.RedisCacheConfiguration;
31 import org.springframework.data.redis.cache.RedisCacheManager; 33 import org.springframework.data.redis.cache.RedisCacheManager;
32 import org.springframework.data.redis.cache.RedisCacheWriter; 34 import org.springframework.data.redis.cache.RedisCacheWriter;
@@ -124,10 +126,12 @@ public class YudaoTenantAutoConfiguration { @@ -124,10 +126,12 @@ public class YudaoTenantAutoConfiguration {
124 @Bean 126 @Bean
125 @Primary // 引入租户时,tenantRedisCacheManager 为主 Bean 127 @Primary // 引入租户时,tenantRedisCacheManager 为主 Bean
126 public RedisCacheManager tenantRedisCacheManager(RedisTemplate<String, Object> redisTemplate, 128 public RedisCacheManager tenantRedisCacheManager(RedisTemplate<String, Object> redisTemplate,
127 - RedisCacheConfiguration redisCacheConfiguration) { 129 + RedisCacheConfiguration redisCacheConfiguration,
  130 + YudaoCacheProperties yudaoCacheProperties) {
128 // 创建 RedisCacheWriter 对象 131 // 创建 RedisCacheWriter 对象
129 RedisConnectionFactory connectionFactory = Objects.requireNonNull(redisTemplate.getConnectionFactory()); 132 RedisConnectionFactory connectionFactory = Objects.requireNonNull(redisTemplate.getConnectionFactory());
130 - RedisCacheWriter cacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(connectionFactory); 133 + RedisCacheWriter cacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(connectionFactory,
  134 + BatchStrategies.scan(yudaoCacheProperties.getRedisScanBatchSize()));
131 // 创建 TenantRedisCacheManager 对象 135 // 创建 TenantRedisCacheManager 对象
132 return new TenantRedisCacheManager(cacheWriter, redisCacheConfiguration); 136 return new TenantRedisCacheManager(cacheWriter, redisCacheConfiguration);
133 } 137 }
yudao-framework/yudao-spring-boot-starter-redis/src/main/java/cn/iocoder/yudao/framework/redis/config/YudaoCacheAutoConfiguration.java
@@ -8,6 +8,7 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties @@ -8,6 +8,7 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties
8 import org.springframework.cache.annotation.EnableCaching; 8 import org.springframework.cache.annotation.EnableCaching;
9 import org.springframework.context.annotation.Bean; 9 import org.springframework.context.annotation.Bean;
10 import org.springframework.context.annotation.Primary; 10 import org.springframework.context.annotation.Primary;
  11 +import org.springframework.data.redis.cache.BatchStrategies;
11 import org.springframework.data.redis.cache.RedisCacheConfiguration; 12 import org.springframework.data.redis.cache.RedisCacheConfiguration;
12 import org.springframework.data.redis.cache.RedisCacheManager; 13 import org.springframework.data.redis.cache.RedisCacheManager;
13 import org.springframework.data.redis.cache.RedisCacheWriter; 14 import org.springframework.data.redis.cache.RedisCacheWriter;
@@ -23,7 +24,7 @@ import static cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguratio @@ -23,7 +24,7 @@ import static cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguratio
23 * Cache 配置类,基于 Redis 实现 24 * Cache 配置类,基于 Redis 实现
24 */ 25 */
25 @AutoConfiguration 26 @AutoConfiguration
26 -@EnableConfigurationProperties({CacheProperties.class}) 27 +@EnableConfigurationProperties({CacheProperties.class, YudaoCacheProperties.class})
27 @EnableCaching 28 @EnableCaching
28 public class YudaoCacheAutoConfiguration { 29 public class YudaoCacheAutoConfiguration {
29 30
@@ -62,10 +63,12 @@ public class YudaoCacheAutoConfiguration { @@ -62,10 +63,12 @@ public class YudaoCacheAutoConfiguration {
62 63
63 @Bean 64 @Bean
64 public RedisCacheManager redisCacheManager(RedisTemplate<String, Object> redisTemplate, 65 public RedisCacheManager redisCacheManager(RedisTemplate<String, Object> redisTemplate,
65 - RedisCacheConfiguration redisCacheConfiguration) { 66 + RedisCacheConfiguration redisCacheConfiguration,
  67 + YudaoCacheProperties yudaoCacheProperties) {
66 // 创建 RedisCacheWriter 对象 68 // 创建 RedisCacheWriter 对象
67 RedisConnectionFactory connectionFactory = Objects.requireNonNull(redisTemplate.getConnectionFactory()); 69 RedisConnectionFactory connectionFactory = Objects.requireNonNull(redisTemplate.getConnectionFactory());
68 - RedisCacheWriter cacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(connectionFactory); 70 + RedisCacheWriter cacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(connectionFactory,
  71 + BatchStrategies.scan(yudaoCacheProperties.getRedisScanBatchSize()));
69 // 创建 TenantRedisCacheManager 对象 72 // 创建 TenantRedisCacheManager 对象
70 return new TimeoutRedisCacheManager(cacheWriter, redisCacheConfiguration); 73 return new TimeoutRedisCacheManager(cacheWriter, redisCacheConfiguration);
71 } 74 }
yudao-framework/yudao-spring-boot-starter-redis/src/main/java/cn/iocoder/yudao/framework/redis/config/YudaoCacheProperties.java 0 → 100644
  1 +package cn.iocoder.yudao.framework.redis.config;
  2 +
  3 +import lombok.Data;
  4 +import org.springframework.boot.context.properties.ConfigurationProperties;
  5 +import org.springframework.validation.annotation.Validated;
  6 +
  7 +/**
  8 + * Cache 配置项
  9 + *
  10 + * @author Wanwan
  11 + */
  12 +@ConfigurationProperties("yudao.cache")
  13 +@Data
  14 +@Validated
  15 +public class YudaoCacheProperties {
  16 +
  17 + /**
  18 + * {@link #redisScanBatchSize} 默认值
  19 + */
  20 + private static final Integer REDIS_SCAN_BATCH_SIZE_DEFAULT = 30;
  21 +
  22 + /**
  23 + * redis scan 一次返回数量
  24 + */
  25 + private Integer redisScanBatchSize = REDIS_SCAN_BATCH_SIZE_DEFAULT;
  26 +
  27 +}
yudao-framework/yudao-spring-boot-starter-redis/src/main/java/cn/iocoder/yudao/framework/redis/core/TimeoutRedisCacheManager.java
1 package cn.iocoder.yudao.framework.redis.core; 1 package cn.iocoder.yudao.framework.redis.core;
2 2
  3 +import cn.hutool.core.util.NumberUtil;
3 import cn.hutool.core.util.StrUtil; 4 import cn.hutool.core.util.StrUtil;
4 -import org.springframework.boot.convert.DurationStyle;  
5 import org.springframework.cache.annotation.Cacheable; 5 import org.springframework.cache.annotation.Cacheable;
6 import org.springframework.data.redis.cache.RedisCache; 6 import org.springframework.data.redis.cache.RedisCache;
7 import org.springframework.data.redis.cache.RedisCacheConfiguration; 7 import org.springframework.data.redis.cache.RedisCacheConfiguration;
@@ -9,12 +9,12 @@ import org.springframework.data.redis.cache.RedisCacheManager; @@ -9,12 +9,12 @@ import org.springframework.data.redis.cache.RedisCacheManager;
9 import org.springframework.data.redis.cache.RedisCacheWriter; 9 import org.springframework.data.redis.cache.RedisCacheWriter;
10 10
11 import java.time.Duration; 11 import java.time.Duration;
12 -import java.time.temporal.ChronoUnit;  
13 12
14 /** 13 /**
15 * 支持自定义过期时间的 {@link RedisCacheManager} 实现类 14 * 支持自定义过期时间的 {@link RedisCacheManager} 实现类
16 * 15 *
17 - * 在 {@link Cacheable#cacheNames()} 格式为 "key#ttl" 时,# 后面的 ttl 为过期时间,单位为秒 16 + * 在 {@link Cacheable#cacheNames()} 格式为 "key#ttl" 时,# 后面的 ttl 为过期时间。
  17 + * 单位为最后一个字母(支持的单位有:d 天,h 小时,m 分钟,s 秒),默认单位为 s 秒
18 * 18 *
19 * @author 芋道源码 19 * @author 芋道源码
20 */ 20 */
@@ -42,10 +42,42 @@ public class TimeoutRedisCacheManager extends RedisCacheManager { @@ -42,10 +42,42 @@ public class TimeoutRedisCacheManager extends RedisCacheManager {
42 // 移除 # 后面的 : 以及后面的内容,避免影响解析 42 // 移除 # 后面的 : 以及后面的内容,避免影响解析
43 names[1] = StrUtil.subBefore(names[1], StrUtil.COLON, false); 43 names[1] = StrUtil.subBefore(names[1], StrUtil.COLON, false);
44 // 解析时间 44 // 解析时间
45 - Duration duration = DurationStyle.detectAndParse(names[1], ChronoUnit.SECONDS); 45 + Duration duration = parseDuration(names[1]);
46 cacheConfig = cacheConfig.entryTtl(duration); 46 cacheConfig = cacheConfig.entryTtl(duration);
47 } 47 }
48 return super.createRedisCache(names[0], cacheConfig); 48 return super.createRedisCache(names[0], cacheConfig);
49 } 49 }
50 50
  51 + /**
  52 + * 解析过期时间 Duration
  53 + *
  54 + * @param ttlStr 过期时间字符串
  55 + * @return 过期时间 Duration
  56 + */
  57 + private Duration parseDuration(String ttlStr) {
  58 + String timeUnit = StrUtil.subSuf(ttlStr, -1);
  59 + switch (timeUnit) {
  60 + case "d":
  61 + return Duration.ofDays(removeDurationSuffix(ttlStr));
  62 + case "h":
  63 + return Duration.ofHours(removeDurationSuffix(ttlStr));
  64 + case "m":
  65 + return Duration.ofMinutes(removeDurationSuffix(ttlStr));
  66 + case "s":
  67 + return Duration.ofSeconds(removeDurationSuffix(ttlStr));
  68 + default:
  69 + return Duration.ofSeconds(Long.parseLong(ttlStr));
  70 + }
  71 + }
  72 +
  73 + /**
  74 + * 移除多余的后缀,返回具体的时间
  75 + *
  76 + * @param ttlStr 过期时间字符串
  77 + * @return 时间
  78 + */
  79 + private Long removeDurationSuffix(String ttlStr) {
  80 + return NumberUtil.parseLong(StrUtil.sub(ttlStr, 0, ttlStr.length() - 1));
  81 + }
  82 +
51 } 83 }
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/permission/MenuServiceImpl.java
@@ -45,7 +45,8 @@ public class MenuServiceImpl implements MenuService { @@ -45,7 +45,8 @@ public class MenuServiceImpl implements MenuService {
45 private TenantService tenantService; 45 private TenantService tenantService;
46 46
47 @Override 47 @Override
48 - @CacheEvict(value = RedisKeyConstants.PERMISSION_MENU_ID_LIST, key = "#reqVO.permission") 48 + @CacheEvict(value = RedisKeyConstants.PERMISSION_MENU_ID_LIST, key = "#reqVO.permission",
  49 + condition = "#reqVO.permission != null")
49 public Long createMenu(MenuCreateReqVO reqVO) { 50 public Long createMenu(MenuCreateReqVO reqVO) {
50 // 校验父菜单存在 51 // 校验父菜单存在
51 validateParentMenu(reqVO.getParentId(), null); 52 validateParentMenu(reqVO.getParentId(), null);
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/tenant/TenantServiceImpl.java
@@ -34,7 +34,6 @@ import lombok.extern.slf4j.Slf4j; @@ -34,7 +34,6 @@ import lombok.extern.slf4j.Slf4j;
34 import org.springframework.beans.factory.annotation.Autowired; 34 import org.springframework.beans.factory.annotation.Autowired;
35 import org.springframework.context.annotation.Lazy; 35 import org.springframework.context.annotation.Lazy;
36 import org.springframework.stereotype.Service; 36 import org.springframework.stereotype.Service;
37 -import org.springframework.transaction.annotation.Transactional;  
38 import org.springframework.validation.annotation.Validated; 37 import org.springframework.validation.annotation.Validated;
39 38
40 import javax.annotation.Resource; 39 import javax.annotation.Resource;
@@ -175,7 +174,7 @@ public class TenantServiceImpl implements TenantService { @@ -175,7 +174,7 @@ public class TenantServiceImpl implements TenantService {
175 public void updateTenantRoleMenu(Long tenantId, Set<Long> menuIds) { 174 public void updateTenantRoleMenu(Long tenantId, Set<Long> menuIds) {
176 TenantUtils.execute(tenantId, () -> { 175 TenantUtils.execute(tenantId, () -> {
177 // 获得所有角色 176 // 获得所有角色
178 - List<RoleDO> roles = roleService.getRoleListByStatus(null); 177 + List<RoleDO> roles = roleService.getRoleList();
179 roles.forEach(role -> Assert.isTrue(tenantId.equals(role.getTenantId()), "角色({}/{}) 租户不匹配", 178 roles.forEach(role -> Assert.isTrue(tenantId.equals(role.getTenantId()), "角色({}/{}) 租户不匹配",
180 role.getId(), role.getTenantId(), tenantId)); // 兜底校验 179 role.getId(), role.getTenantId(), tenantId)); // 兜底校验
181 // 重新分配每个角色的权限 180 // 重新分配每个角色的权限
yudao-server/pom.xml
@@ -111,7 +111,7 @@ @@ -111,7 +111,7 @@
111 <plugin> 111 <plugin>
112 <groupId>org.springframework.boot</groupId> 112 <groupId>org.springframework.boot</groupId>
113 <artifactId>spring-boot-maven-plugin</artifactId> 113 <artifactId>spring-boot-maven-plugin</artifactId>
114 - <version>2.7.13</version> <!-- 如果 spring.boot.version 版本修改,则这里也要跟着修改 --> 114 + <version>2.7.14</version> <!-- 如果 spring.boot.version 版本修改,则这里也要跟着修改 -->
115 <configuration> 115 <configuration>
116 <fork>true</fork> 116 <fork>true</fork>
117 </configuration> 117 </configuration>
yudao-ui-admin/src/assets/styles/ruoyi.scss
@@ -95,7 +95,7 @@ @@ -95,7 +95,7 @@
95 font-size: 13px; 95 font-size: 13px;
96 } 96 }
97 } 97 }
98 - .el-table__body-wrapper { 98 + .el-table__body-wrapper,.el-table__fixed-body-wrapper {
99 .el-button [class*="el-icon-"] + span { 99 .el-button [class*="el-icon-"] + span {
100 margin-left: 1px; 100 margin-left: 1px;
101 } 101 }
yudao-ui-admin/src/views/infra/fileConfig/index.vue
@@ -102,7 +102,7 @@ @@ -102,7 +102,7 @@
102 <el-form-item v-if="form.storage === 11" label="连接模式" prop="config.mode"> 102 <el-form-item v-if="form.storage === 11" label="连接模式" prop="config.mode">
103 <el-radio-group v-model="form.config.mode"> 103 <el-radio-group v-model="form.config.mode">
104 <el-radio key="Active" label="Active">主动模式</el-radio> 104 <el-radio key="Active" label="Active">主动模式</el-radio>
105 - <el-radio key="Passive" label="Passive">主动模式</el-radio> 105 + <el-radio key="Passive" label="Passive">被动模式</el-radio>
106 </el-radio-group> 106 </el-radio-group>
107 </el-form-item> 107 </el-form-item>
108 <!-- S3 --> 108 <!-- S3 -->
yudao-ui-admin/src/views/pay/cashier/index.vue
@@ -238,7 +238,7 @@ export default { @@ -238,7 +238,7 @@ export default {
238 if (data.status === PayOrderStatusEnum.SUCCESS.status) { 238 if (data.status === PayOrderStatusEnum.SUCCESS.status) {
239 this.clearQueryInterval(); 239 this.clearQueryInterval();
240 this.$message.success('支付成功!'); 240 this.$message.success('支付成功!');
241 - this.goReturnUrl(); 241 + this.goReturnUrl('success');
242 return 242 return
243 } 243 }
244 244
@@ -321,13 +321,13 @@ export default { @@ -321,13 +321,13 @@ export default {
321 if (response.data.status === PayOrderStatusEnum.SUCCESS.status) { 321 if (response.data.status === PayOrderStatusEnum.SUCCESS.status) {
322 this.clearQueryInterval(); 322 this.clearQueryInterval();
323 this.$message.success('支付成功!'); 323 this.$message.success('支付成功!');
324 - this.goReturnUrl(); 324 + this.goReturnUrl('success');
325 } 325 }
326 // 已取消 326 // 已取消
327 if (response.data.status === PayOrderStatusEnum.CLOSED.status) { 327 if (response.data.status === PayOrderStatusEnum.CLOSED.status) {
328 this.clearQueryInterval(); 328 this.clearQueryInterval();
329 this.$message.error('支付已关闭!'); 329 this.$message.error('支付已关闭!');
330 - this.goReturnUrl(); 330 + this.goReturnUrl('close');
331 } 331 }
332 }) 332 })
333 }, 1000 * 2) 333 }, 1000 * 2)
yudao-ui-admin/src/views/pay/order/index.vue
@@ -302,25 +302,7 @@ export default { @@ -302,25 +302,7 @@ export default {
302 font-weight: bold; 302 font-weight: bold;
303 } 303 }
304 304
305 -.tag-purple {  
306 - color: #722ed1;  
307 - background: #f9f0ff;  
308 - border-color: #d3adf7;  
309 -}  
310 -  
311 -.tag-cyan {  
312 - color: #13c2c2;  
313 - background: #e6fffb;  
314 - border-color: #87e8de;  
315 -}  
316 -  
317 -.tag-pink {  
318 - color: #eb2f96;  
319 - background: #fff0f6;  
320 - border-color: #ffadd2;  
321 -}  
322 -  
323 -.order-font{ 305 +.order-font {
324 font-size: 12px; 306 font-size: 12px;
325 padding: 2px 0; 307 padding: 2px 0;
326 } 308 }