Commit 9209e8da1c54ca0b09645a47086ee15479c83113

Authored by YunaiV
1 parent 3583109f

修复菜单、角色删除时,缓存未刷新的问题

yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/MenuMapper.java
1 package cn.iocoder.yudao.module.system.dal.mysql.permission; 1 package cn.iocoder.yudao.module.system.dal.mysql.permission;
2 2
3 -import cn.iocoder.yudao.framework.mybatis.core.enums.SqlConstants;  
4 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; 3 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
5 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; 4 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
6 import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuListReqVO; 5 import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuListReqVO;
7 import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO; 6 import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO;
8 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 7 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
9 import org.apache.ibatis.annotations.Mapper; 8 import org.apache.ibatis.annotations.Mapper;
  9 +import org.apache.ibatis.annotations.Select;
10 10
11 import java.util.Date; 11 import java.util.Date;
12 import java.util.List; 12 import java.util.List;
@@ -28,9 +28,7 @@ public interface MenuMapper extends BaseMapperX<MenuDO> { @@ -28,9 +28,7 @@ public interface MenuMapper extends BaseMapperX<MenuDO> {
28 .eqIfPresent(MenuDO::getStatus, reqVO.getStatus())); 28 .eqIfPresent(MenuDO::getStatus, reqVO.getStatus()));
29 } 29 }
30 30
31 - default boolean selectExistsByUpdateTimeAfter(Date maxUpdateTime) {  
32 - return selectOne(new LambdaQueryWrapper<MenuDO>().select(MenuDO::getId)  
33 - .gt(MenuDO::getUpdateTime, maxUpdateTime).last(SqlConstants.LIMIT1)) != null;  
34 - } 31 + @Select("SELECT id FROM system_menu WHERE update_time > #{maxUpdateTime} LIMIT 1")
  32 + MenuDO selectExistsByUpdateTimeAfter(Date maxUpdateTime);
35 33
36 } 34 }
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/RoleMapper.java
@@ -7,9 +7,8 @@ import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; @@ -7,9 +7,8 @@ import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX;
7 import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleExportReqVO; 7 import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleExportReqVO;
8 import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RolePageReqVO; 8 import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RolePageReqVO;
9 import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO; 9 import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO;
10 -import com.baomidou.mybatisplus.annotation.InterceptorIgnore;  
11 -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;  
12 import org.apache.ibatis.annotations.Mapper; 10 import org.apache.ibatis.annotations.Mapper;
  11 +import org.apache.ibatis.annotations.Select;
13 import org.springframework.lang.Nullable; 12 import org.springframework.lang.Nullable;
14 13
15 import java.util.Collection; 14 import java.util.Collection;
@@ -45,10 +44,7 @@ public interface RoleMapper extends BaseMapperX&lt;RoleDO&gt; { @@ -45,10 +44,7 @@ public interface RoleMapper extends BaseMapperX&lt;RoleDO&gt; {
45 return selectList(new LambdaQueryWrapperX<RoleDO>().inIfPresent(RoleDO::getStatus, statuses)); 44 return selectList(new LambdaQueryWrapperX<RoleDO>().inIfPresent(RoleDO::getStatus, statuses));
46 } 45 }
47 46
48 - @InterceptorIgnore(tenantLine = "true") // 该方法忽略多租户。原因:该方法被异步 task 调用,此时获取不到租户编号  
49 - default boolean selectExistsByUpdateTimeAfter(Date maxUpdateTime) {  
50 - return selectOne(new QueryWrapper<RoleDO>().select("id")  
51 - .gt("update_time", maxUpdateTime).last("LIMIT 1")) != null;  
52 - } 47 + @Select("SELECT id FROM system_role WHERE update_time > #{maxUpdateTime} LIMIT 1")
  48 + RoleDO selectExistsByUpdateTimeAfter(Date maxUpdateTime);
53 49
54 } 50 }
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/MenuServiceImpl.java
@@ -120,7 +120,7 @@ public class MenuServiceImpl implements MenuService { @@ -120,7 +120,7 @@ public class MenuServiceImpl implements MenuService {
120 if (maxUpdateTime == null) { // 如果更新时间为空,说明 DB 一定有新数据 120 if (maxUpdateTime == null) { // 如果更新时间为空,说明 DB 一定有新数据
121 log.info("[loadMenuIfUpdate][首次加载全量菜单]"); 121 log.info("[loadMenuIfUpdate][首次加载全量菜单]");
122 } else { // 判断数据库中是否有更新的菜单 122 } else { // 判断数据库中是否有更新的菜单
123 - if (!menuMapper.selectExistsByUpdateTimeAfter(maxUpdateTime)) { 123 + if (menuMapper.selectExistsByUpdateTimeAfter(maxUpdateTime) == null) {
124 return null; 124 return null;
125 } 125 }
126 log.info("[loadMenuIfUpdate][增量加载全量菜单]"); 126 log.info("[loadMenuIfUpdate][增量加载全量菜单]");
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/permission/RoleServiceImpl.java
@@ -116,7 +116,7 @@ public class RoleServiceImpl implements RoleService { @@ -116,7 +116,7 @@ public class RoleServiceImpl implements RoleService {
116 if (maxUpdateTime == null) { // 如果更新时间为空,说明 DB 一定有新数据 116 if (maxUpdateTime == null) { // 如果更新时间为空,说明 DB 一定有新数据
117 log.info("[loadRoleIfUpdate][首次加载全量角色]"); 117 log.info("[loadRoleIfUpdate][首次加载全量角色]");
118 } else { // 判断数据库中是否有更新的角色 118 } else { // 判断数据库中是否有更新的角色
119 - if (!roleMapper.selectExistsByUpdateTimeAfter(maxUpdateTime)) { 119 + if (roleMapper.selectExistsByUpdateTimeAfter(maxUpdateTime) == null) {
120 return null; 120 return null;
121 } 121 }
122 log.info("[loadRoleIfUpdate][增量加载全量角色]"); 122 log.info("[loadRoleIfUpdate][增量加载全量角色]");