Commit 49f25a88704b79a6713bbd4835a0359d5b629921

Authored by asas6559
1 parent bbea33e7

解决由于mybatis-plus无法过滤软删除导致角色去掉菜单缓存未刷新的问题

src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/permission/SysRoleMenuMapper.java
... ... @@ -4,6 +4,7 @@ import cn.iocoder.dashboard.framework.mybatis.core.mapper.BaseMapperX;
4 4 import cn.iocoder.dashboard.modules.system.dal.dataobject.permission.SysRoleMenuDO;
5 5 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
6 6 import org.apache.ibatis.annotations.Mapper;
  7 +import org.apache.ibatis.annotations.Select;
7 8  
8 9 import java.util.Collection;
9 10 import java.util.Date;
... ... @@ -33,7 +34,7 @@ public interface SysRoleMenuMapper extends BaseMapperX<SysRoleMenuDO> {
33 34 .in("menu_id", menuIds));
34 35 }
35 36  
36   - @Select("select id from sys_role_menu where update_time > #{maxUpdateTime} limit 1")
37   - List<Long> selectExistsByUpdateTimeAfter(Date maxUpdateTime);
  37 + @Select("SELECT id FROM sys_role_menu WHERE update_time > #{maxUpdateTime} LIMIT 1")
  38 + Long selectExistsByUpdateTimeAfter(Date maxUpdateTime);
38 39  
39 40 }
... ...
src/main/java/cn/iocoder/dashboard/modules/system/service/permission/impl/SysPermissionServiceImpl.java
... ... @@ -86,6 +86,7 @@ public class SysPermissionServiceImpl implements SysPermissionService {
86 86 @Override
87 87 @PostConstruct
88 88 public void initLocalCache() {
  89 + Date now = new Date();
89 90 // 获取角色与菜单的关联列表,如果有更新
90 91 List<SysRoleMenuDO> roleMenuList = this.loadRoleMenuIfUpdate(maxUpdateTime);
91 92 if (CollUtil.isEmpty(roleMenuList)) {
... ... @@ -102,7 +103,7 @@ public class SysPermissionServiceImpl implements SysPermissionService {
102 103 roleMenuCache = roleMenuCacheBuilder.build();
103 104 menuRoleCache = menuRoleCacheBuilder.build();
104 105 assert roleMenuList.size() > 0; // 断言,避免告警
105   - maxUpdateTime = roleMenuList.stream().max(Comparator.comparing(BaseDO::getUpdateTime)).get().getUpdateTime();
  106 + maxUpdateTime = now;
106 107 log.info("[initLocalCache][初始化角色与菜单的关联数量为 {}]", roleMenuList.size());
107 108 }
108 109  
... ... @@ -123,7 +124,7 @@ public class SysPermissionServiceImpl implements SysPermissionService {
123 124 if (maxUpdateTime == null) { // 如果更新时间为空,说明 DB 一定有新数据
124 125 log.info("[loadRoleMenuIfUpdate][首次加载全量角色与菜单的关联]");
125 126 } else { // 判断数据库中是否有更新的角色与菜单的关联
126   - if (roleMenuMapper.selectExistsByUpdateTimeAfter(maxUpdateTime).size() == 0) {
  127 + if (Objects.isNull(roleMenuMapper.selectExistsByUpdateTimeAfter(maxUpdateTime))) {
127 128 return null;
128 129 }
129 130 log.info("[loadRoleMenuIfUpdate][增量加载全量角色与菜单的关联]");
... ...