作者 朱兆平

权限优化

... ... @@ -156,7 +156,7 @@ public class RedisCacheableAspect {
if(allEntries){
if(cacheKey!=null){
Long result = redisTemplate.delete(redisTemplate.keys(cacheKey+"*"));
log.info("已删除{}个缓存",result);
log.info("已删除{}个缓存->{}*<-",result,cacheKey);
}
}
}catch (Exception e){
... ...
... ... @@ -107,4 +107,11 @@ public class PermssionController {
permissionService.flushCache();
return new ResultJson("200","清理缓存成功");
}
@GetMapping("/userMenu")
public ResultJson<List<PERMISSION>> userMenu(
@RequestParam(value = "userId", required = true) Integer userId){
return new ResultJson<List<PERMISSION>>("200","success",permissionService.getUserMenuTreeByUserId(userId));
}
}
... ...
... ... @@ -38,4 +38,8 @@ public interface PERMISSIONMapper {
List<String> findRoleListByUrl(String permissionUrl);
List<PERMISSION> getRolePermisson(Integer roleId);
List<PERMISSION> getUserMenuTreeByUserId(Integer userId);
List<PERMISSION> getChildMenu(Integer parentId);
}
... ...
... ... @@ -31,6 +31,10 @@ public class PERMISSION implements Serializable {
private String component;
private boolean hasChild;
private boolean leaf;
private List<PERMISSION> children;
public Integer getPermissionId() {
... ... @@ -65,10 +69,6 @@ public class PERMISSION implements Serializable {
return ismenu;
}
public void setIsmenu(String ismenu) {
this.ismenu = "0".equals(ismenu)?false:true ;
}
public Integer getParentId() {
return parentId;
}
... ... @@ -122,6 +122,45 @@ public class PERMISSION implements Serializable {
}
public void setChildren(List<PERMISSION> children) {
if (children.isEmpty()){
this.leaf = true;
this.hasChild = false;
}else {
this.leaf = false;
this.hasChild = true;
}
this.children = children;
}
}
\ No newline at end of file
public void setPermissionId(Integer permissionId) {
this.permissionId = permissionId;
}
public void setIsmenu(Boolean ismenu) {
this.ismenu = ismenu;
}
public Boolean getHidden() {
return hidden;
}
public void setHidden(Boolean hidden) {
this.hidden = hidden;
}
public boolean isHasChild() {
return hasChild;
}
public void setHasChild(boolean hasChild) {
this.hasChild = hasChild;
}
public boolean isLeaf() {
return leaf;
}
public void setLeaf(boolean leaf) {
this.leaf = leaf;
}
}
... ...
... ... @@ -39,4 +39,11 @@ public interface PermissionService {
* 清理跟permission相关的所有缓存
*/
void flushCache();
/**
* 用户菜单树形
* @param userId
* @return
*/
List<PERMISSION> getUserMenuTreeByUserId(Integer userId);
}
... ...
... ... @@ -9,6 +9,7 @@ import com.tianbo.warehouse.annotation.cache.annotation.RedisCacheable;
import com.tianbo.warehouse.dao.PERMISSIONMapper;
import com.tianbo.warehouse.model.PERMISSION;
import com.tianbo.warehouse.service.PermissionService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
... ... @@ -17,6 +18,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Slf4j
@Service("PermissionService")
public class PermissionServiceImp implements PermissionService {
... ... @@ -39,8 +41,8 @@ public class PermissionServiceImp implements PermissionService {
return list;
}
@Override
@RedisCacheDelTarget(cacheKey = "com.tianbo.warehouse.service.imp.PermissionServiceImp")
@Override
public int insertSelective(PERMISSION record) {
return permissionMapper.insertSelective(record);
}
... ... @@ -152,8 +154,8 @@ public class PermissionServiceImp implements PermissionService {
* @param permissionId
* @return
*/
@Override
@RedisCacheDelTarget(cacheKey = "com.tianbo.warehouse.service.imp.PermissionServiceImp")
@Override
public int deleteByPrimaryKey(String permissionId) {
if (permissionId.contains(",")) {
try {
... ... @@ -175,7 +177,13 @@ public class PermissionServiceImp implements PermissionService {
@RedisCacheDelTarget(cacheKey = "com.tianbo.warehouse.service.imp.PermissionServiceImp")
@Override
public void flushCache(){
log.info("删除缓存");
}
@Override
@RedisCacheable(cacheKey = "getUserMenuTreeByUserId")
public List<PERMISSION> getUserMenuTreeByUserId(Integer userId) {
return permissionMapper.getUserMenuTreeByUserId(userId);
}
}
... ...
... ... @@ -15,22 +15,14 @@
<result column="iconCls" property="iconCls" jdbcType="VARCHAR" />
<result column="component" property="component" jdbcType="VARCHAR" />
</resultMap>
<resultMap id="treeResultMap" type="com.tianbo.warehouse.model.PERMISSION" >
<id column="permission_id" property="permissionId" jdbcType="INTEGER" />
<result column="name" property="name" jdbcType="VARCHAR" />
<result column="permission_order" property="permissionOrder" jdbcType="VARCHAR" />
<result column="description" property="description" jdbcType="VARCHAR" />
<result column="ismenu" property="ismenu" jdbcType="BOOLEAN" />
<result column="hidden" property="hidden" jdbcType="BOOLEAN" />
<result column="parent_id" property="parentId" jdbcType="INTEGER" />
<result column="path" property="path" jdbcType="VARCHAR" />
<result column="url" property="url" jdbcType="VARCHAR" />
<result column="method" property="method" jdbcType="VARCHAR" />
<result column="iconCls" property="iconCls" jdbcType="VARCHAR" />
<result column="component" property="component" jdbcType="VARCHAR" />
<resultMap id="treeResultMap" type="com.tianbo.warehouse.model.PERMISSION" extends="BaseResultMap">
<collection property="children" column="permission_id" javaType="java.util.ArrayList" ofType="com.tianbo.warehouse.model.PERMISSION" select="selectByParentId">
</collection>
</resultMap>
<resultMap id="treeMap" type="com.tianbo.warehouse.model.PERMISSION" extends="BaseResultMap">
<collection property="children" column="permission_id" javaType="java.util.ArrayList" ofType="com.tianbo.warehouse.model.PERMISSION" select="getChildMenu">
</collection>
</resultMap>
<sql id="Base_Column_List" >
permission_id, name, permission_order, description, ismenu,hidden,parent_id,
path, url, method, iconCls, component
... ... @@ -332,4 +324,52 @@ where P.url = #{permissionUrl,jdbcType=VARCHAR} ORDER BY permission_order
component = #{component,jdbcType=VARCHAR}
where permission_id = #{permissionId,jdbcType=INTEGER}
</update>
<select id="getUserMenuTreeByUserId" parameterType="java.lang.Integer" resultMap="treeMap">
SELECT
P.*
FROM
permission P
WHERE
parent_id = 0
AND
ismenu = 1
AND
P.permission_id IN (
SELECT
RP.permission_id
FROM
role_permission RP
WHERE
RP.role_id IN (
SELECT
R.role_id
FROM
role R
WHERE
R.role_id IN (
SELECT
UR.role_id
FROM
user_role UR
WHERE
UR.user_id = #{userId,jdbcType=INTEGER}
)
)
)
ORDER BY
permission_order
</select>
<select id="getChildMenu" parameterType="java.lang.Integer" resultMap="BaseResultMap">
SELECT
*
FROM
permission
WHERE
ismenu = 1
AND
parent_id = #{parentId,jdbcType=INTEGER}
ORDER BY
permission_order
</select>
</mapper>
... ...