package com.ycl.service.user.impl; import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.ycl.entity.user.UmsAdmin; import com.ycl.entity.user.UmsAdminRoleRelation; import com.ycl.entity.user.UmsResource; import com.ycl.mapper.user.UmsAdminMapper; import com.ycl.service.redis.RedisService; import com.ycl.service.user.UmsAdminCacheService; import com.ycl.service.user.UmsAdminRoleRelationService; import com.ycl.service.user.UmsAdminService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.List; import java.util.stream.Collectors; /** * 后台用户缓存管理Service实现类 * Created by macro on 2020/3/13. */ @Service public class UmsAdminCacheServiceImpl implements UmsAdminCacheService { @Resource private UmsAdminService umsAdminService; @Resource private RedisService redisService; @Resource private UmsAdminMapper umsAdminMapper; @Resource private UmsAdminRoleRelationService adminRoleRelationService; @Value("${redis.database}") private String REDIS_DATABASE; @Value("${redis.expire.common}") private Long REDIS_EXPIRE; @Value("${redis.key.admin}") private String REDIS_KEY_ADMIN; @Value("${redis.key.resourceList}") private String REDIS_KEY_RESOURCE_LIST; @Override public void delAdmin(Long adminId) { UmsAdmin admin = umsAdminService.getById(adminId); if (admin != null) { String key = REDIS_DATABASE + ":" + REDIS_KEY_ADMIN + ":" + admin.getUsername(); redisService.del(key); } } @Override public void delResourceList(Long adminId) { String key = REDIS_DATABASE + ":" + REDIS_KEY_RESOURCE_LIST + ":" + adminId; redisService.del(key); } @Override public void delResourceListByRole(Long roleId) { QueryWrapper wrapper = new QueryWrapper<>(); wrapper.lambda().eq(UmsAdminRoleRelation::getRoleId,roleId); List relationList = adminRoleRelationService.list(wrapper); if (CollUtil.isNotEmpty(relationList)) { String keyPrefix = REDIS_DATABASE + ":" + REDIS_KEY_RESOURCE_LIST + ":"; List keys = relationList.stream().map(relation -> keyPrefix + relation.getAdminId()).collect(Collectors.toList()); redisService.del(keys); } } @Override public void delResourceListByRoleIds(List roleIds) { QueryWrapper wrapper = new QueryWrapper<>(); wrapper.lambda().in(UmsAdminRoleRelation::getRoleId,roleIds); List relationList = adminRoleRelationService.list(wrapper); if (CollUtil.isNotEmpty(relationList)) { String keyPrefix = REDIS_DATABASE + ":" + REDIS_KEY_RESOURCE_LIST + ":"; List keys = relationList.stream().map(relation -> keyPrefix + relation.getAdminId()).collect(Collectors.toList()); redisService.del(keys); } } @Override public void delResourceListByResource(Long resourceId) { List adminIdList = umsAdminMapper.getAdminIdList(resourceId); if (CollUtil.isNotEmpty(adminIdList)) { String keyPrefix = REDIS_DATABASE + ":" + REDIS_KEY_RESOURCE_LIST + ":"; List keys = adminIdList.stream().map(adminId -> keyPrefix + adminId).collect(Collectors.toList()); redisService.del(keys); } } @Override public UmsAdmin getAdmin(String username) { String key = REDIS_DATABASE + ":" + REDIS_KEY_ADMIN + ":" + username; return (UmsAdmin) redisService.get(key); } @Override public void setAdmin(UmsAdmin admin) { String key = REDIS_DATABASE + ":" + REDIS_KEY_ADMIN + ":" + admin.getUsername(); redisService.set(key, admin, REDIS_EXPIRE); } @Override public List getResourceList(Long adminId) { String key = REDIS_DATABASE + ":" + REDIS_KEY_RESOURCE_LIST + ":" + adminId; return (List) redisService.get(key); } @Override public void setResourceList(Long adminId, List resourceList) { String key = REDIS_DATABASE + ":" + REDIS_KEY_RESOURCE_LIST + ":" + adminId; redisService.set(key, resourceList, REDIS_EXPIRE); } }