CmsUserManager.java 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. package com.cyksj.service.mange.cms;
  2. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  3. import com.cyksj.common.task.GlobalThreadPoolTaskExecutor;
  4. import com.cyksj.mapper.manage.cms.CmsMenuMapper;
  5. import com.cyksj.mapper.manage.cms.CmsRoleMapper;
  6. import com.cyksj.mapper.manage.cms.CmsUserMapper;
  7. import com.cyksj.mapper.manage.cms.CmsUserRoleMapper;
  8. import com.cyksj.model.entity.CmsMenu;
  9. import com.cyksj.model.entity.CmsRole;
  10. import com.cyksj.model.entity.CmsUser;
  11. import com.cyksj.model.entity.CmsUserRole;
  12. import com.cyksj.service.mange.business.UserBusinessRateService;
  13. import com.cyksj.service.mange.cms.manager.service.CacheService;
  14. import lombok.RequiredArgsConstructor;
  15. import lombok.extern.slf4j.Slf4j;
  16. import org.springframework.stereotype.Service;
  17. import java.util.Arrays;
  18. import java.util.List;
  19. import java.util.Set;
  20. import java.util.function.Supplier;
  21. import java.util.stream.Collectors;
  22. /*
  23. *项目名: yicang-admin
  24. *文件名: CmsUserManager
  25. *创建者: JavaZou
  26. *创建时间:2022/9/30 13:59
  27. */
  28. @Service
  29. @Slf4j
  30. @RequiredArgsConstructor
  31. public class CmsUserManager {
  32. private final CacheService cacheService;
  33. private final CmsUserMapper cmsUserMapper;
  34. private final CmsRoleMapper cmsRoleMapper;
  35. private final CmsMenuMapper cmsMenuMapper;
  36. private final CmsUserRoleMapper cmsUserRoleMapper;
  37. private final UserBusinessRateService userBusinessRateService;
  38. private static final GlobalThreadPoolTaskExecutor TASK_EXECUTOR = GlobalThreadPoolTaskExecutor.getInstance();
  39. public CmsUser getUser(Long account) {
  40. return selectCacheByTemplate(() -> cacheService.getUserCache(account), () -> cmsUserMapper.selectById(account));
  41. }
  42. public void loadUserRedisCache(CmsUser user) throws Exception {
  43. cacheService.saveUser(user.getId());
  44. // 缓存用户角色
  45. cacheService.saveRoles(user.getId());
  46. // 缓存用户权限
  47. cacheService.savePermissions(user.getId());
  48. }
  49. public Set<String> getUserPermissions(Long account) {
  50. List<CmsMenu> cmsMenus = selectCacheByTemplate(() -> cacheService.getUserPermsCache(account), () -> cmsMenuMapper.getCmsMenusByAccount(account));
  51. if (cmsMenus == null) {
  52. return null;
  53. }
  54. return cmsMenus.stream().map(CmsMenu::getPerms).collect(Collectors.toSet());
  55. }
  56. public Set<String> getUserRoles(Long adminId) {
  57. List<CmsRole> cmsRoles = selectCacheByTemplate(
  58. () -> cacheService.getUserRoleCache(adminId),
  59. () -> cmsRoleMapper.getCmsRolesByAccount(adminId)
  60. );
  61. if (cmsRoles == null) {
  62. return null;
  63. }
  64. return cmsRoles.stream().map(CmsRole::getRoleName).collect(Collectors.toSet());
  65. }
  66. /**
  67. * 缓存查询模板
  68. *
  69. * @param cacheSelector 查询缓存的方法
  70. * @param databaseSelector 数据库查询方法
  71. * @return T
  72. */
  73. public static <T> T selectCacheByTemplate(Supplier<T> cacheSelector, Supplier<T> databaseSelector) {
  74. try {
  75. log.debug("查询redis ······");
  76. // 先查 Redis缓存
  77. T t = cacheSelector.get();
  78. if (t == null) {
  79. // 没有记录再查询数据库
  80. return databaseSelector.get();
  81. }
  82. return t;
  83. } catch (Exception e) {
  84. // 缓存查询出错,则去数据库查询
  85. log.error("redis查询 error:", e);
  86. log.debug("查询数据库 ······");
  87. return databaseSelector.get();
  88. }
  89. }
  90. public void saveUserRoleRelation(Long userId, String roleIds) {
  91. if (!userBusinessRateService.isBusiness(userId)) {
  92. userBusinessRateService.deleteBusinessRateByUid(userId);
  93. }
  94. Arrays.stream(roleIds.split(",")).collect(Collectors.toSet()).forEach(roleId -> {
  95. CmsRole cmsRole = cmsRoleMapper.selectById(roleId);
  96. if (cmsRole != null && cmsRole.getRoleName().contains("商务")) {
  97. TASK_EXECUTOR.execute(() -> userBusinessRateService.saveBusinessRate(userId));
  98. }
  99. cmsUserRoleMapper.insert(new CmsUserRole(userId, Long.valueOf(roleId)));
  100. });
  101. }
  102. public void delUserRoleRelation(Long userId) throws Exception {
  103. cmsUserRoleMapper.delete(Wrappers.lambdaQuery(CmsUserRole.class).eq(CmsUserRole::getUserId, userId));
  104. //删除用户缓存
  105. cacheService.deleteUserCache(userId);
  106. //删除角色缓存
  107. cacheService.delUserRoleCache(userId);
  108. //删除权限缓存
  109. cacheService.delUserPermissionsCache(userId);
  110. }
  111. public void saveUserRoleRelationAndCache(CmsUser cmsUser, String roles) throws Exception {
  112. //用户角色关联入库
  113. this.saveUserRoleRelation(cmsUser.getId(), roles);
  114. //缓存用户最数据
  115. loadUserRedisCache(cmsUser);
  116. }
  117. }