Commit 9209e8da1c54ca0b09645a47086ee15479c83113
1 parent
3583109f
修复菜单、角色删除时,缓存未刷新的问题
Showing
4 changed files
with
8 additions
and
14 deletions
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<RoleDO> { | @@ -45,10 +44,7 @@ public interface RoleMapper extends BaseMapperX<RoleDO> { | ||
| 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][增量加载全量角色]"); |