Bladeren bron

登录返回菜单信息

zhoutg 6 jaren geleden
bovenliggende
commit
2e0adb1a14

+ 4 - 0
user-service/src/main/java/com/diagbot/dto/LoginDTO.java

@@ -2,9 +2,12 @@ package com.diagbot.dto;
 
 import com.diagbot.entity.Organization;
 import com.diagbot.entity.User;
+import com.diagbot.entity.wrapper.MenuWrapper;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.util.List;
+
 /**
  * @Description: 登录输出类
  * @author: gaodm
@@ -16,4 +19,5 @@ public class LoginDTO {
     private User user;
     private String token;
     private Organization organization;
+    private List<MenuWrapper> menuWrappers;
 }

+ 77 - 0
user-service/src/main/java/com/diagbot/entity/Menu.java

@@ -0,0 +1,77 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @Description: 菜单信息
+ * @Author: ztg
+ * @Date: 2018/9/14 13:25
+ */
+@TableName("sys_menu")
+@Getter
+@Setter
+public class Menu implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 用户ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 菜单名称
+     */
+    private String name;
+
+    /**
+     * -1:表示顶级,其他值表示上级菜单的id
+     */
+    private Long parentId;
+
+    /**
+     * 编码,与前端对应
+     */
+    private String code;
+
+    /**
+     * 排序,从小到大
+     */
+    private Integer orderNo;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+
+
+}

+ 72 - 0
user-service/src/main/java/com/diagbot/entity/UserRole.java

@@ -0,0 +1,72 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @Description: 用户权限映射
+ * @Author: ztg
+ * @Date: 2018/9/14 13:25
+ */
+@TableName("sys_user_role")
+@Getter
+@Setter
+public class UserRole implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 用户ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 用户主键
+     */
+    private Long userId;
+
+    /**
+     * 角色主键
+     */
+    private Long roleId;
+
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+
+}

+ 20 - 0
user-service/src/main/java/com/diagbot/entity/wrapper/MenuWrapper.java

@@ -0,0 +1,20 @@
+package com.diagbot.entity.wrapper;
+
+import com.diagbot.entity.Menu;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Description:
+ * @Author: ztg
+ * @Date: 2018/9/14 14:10
+ */
+@Getter
+@Setter
+public class MenuWrapper extends Menu {
+
+    private List<MenuWrapper> subMenuList = new ArrayList<>();
+}

+ 55 - 2
user-service/src/main/java/com/diagbot/facade/UserFacade.java

@@ -7,11 +7,15 @@ import com.diagbot.entity.JWT;
 import com.diagbot.entity.Organization;
 import com.diagbot.entity.User;
 import com.diagbot.entity.UserOrganization;
+import com.diagbot.entity.UserRole;
+import com.diagbot.entity.wrapper.MenuWrapper;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
 import com.diagbot.exception.ServiceErrorCode;
+import com.diagbot.mapper.MenuMapper;
 import com.diagbot.mapper.OrganizationMapper;
 import com.diagbot.mapper.UserOrganizationMapper;
+import com.diagbot.mapper.UserRoleMapper;
 import com.diagbot.service.impl.UserServiceImpl;
 import com.diagbot.util.BeanUtil;
 import com.diagbot.util.ListUtil;
@@ -51,6 +55,10 @@ public class UserFacade extends UserServiceImpl {
     OrganizationMapper organizationMapper;
     @Autowired
     UserOrganizationMapper userOrganizationMapper;
+    @Autowired
+    UserRoleMapper userRoleMapper;
+    @Autowired
+    MenuMapper menuMapper;
 
     public User createUser(UserSaveVO userSaveVO){
         User user = new User();
@@ -68,7 +76,27 @@ public class UserFacade extends UserServiceImpl {
         PasswordEncoder passwordEncoder = PasswordEncoderFactories.createDelegatingPasswordEncoder();
         String entryPassword= passwordEncoder.encode(user.getPassword());
         user.setPassword(entryPassword);
-        this.save(user);
+//        this.save(user);
+
+        // 机构相关业务
+        doOrganization(userSaveVO, user);
+
+        //权限相关业务
+        doPermisson(userSaveVO, user);
+        return  user;
+    }
+
+    //如果机构已存在,只要添加用户与机构的映射即可;如果机构不存在,先添加机构信息
+    public void doPermisson(UserSaveVO userSaveVO, User user) {
+        UserRole  userRole = new UserRole();
+        userRole.setUserId(user.getId());
+        userRole.setRoleId(1L);
+        userRole.setGmtCreate(new Date());
+        userRoleMapper.insert(userRole);
+    }
+
+    //如果机构已存在,只要添加用户与机构的映射即可;如果机构不存在,先添加机构信息
+    public void doOrganization(UserSaveVO userSaveVO, User user) {
         Map<String, Object> paramMap = new HashMap<>();
         String name = userSaveVO.getOrganization();
         paramMap.put("name", name);
@@ -83,12 +111,12 @@ public class UserFacade extends UserServiceImpl {
         } else {
             orgId = list.get(0).getId();
         }
+
         UserOrganization userOrganization = new UserOrganization();
         userOrganization.setUserId(user.getId());
         userOrganization.setOrganizationId(orgId);
         userOrganization.setGmtCreate(new Date());
         userOrganizationMapper.insert(userOrganization);
-        return  user;
     }
 
     //@Cacheable(value = "UserName", key = "'username:'+#p0")
@@ -111,13 +139,38 @@ public class UserFacade extends UserServiceImpl {
             throw new CommonException(ServiceErrorCode.GET_TOKEN_FAIL);
         }
         LoginDTO loginDTO=new LoginDTO();
+        //添加用户
         loginDTO.setUser(user);
+        //添加token
         loginDTO.setToken(jwt.getAccess_token());
+        //添加机构信息
         Organization org = organizationMapper.getByUserId(user.getId());
         loginDTO.setOrganization(org);
+        //添加菜单信息
+        List<MenuWrapper> menuList = menuMapper.getByRole(user.getId());
+        getMenuStruct(menuList);
+        loginDTO.setMenuWrappers(menuList);
         return RespDTO.onSuc(loginDTO);
     }
 
+    /**
+     * @Description: 递归获取菜单结构
+     * @Author: ztg
+     * @Date: 2018/9/14 13:56
+     */
+    public void getMenuStruct(List<MenuWrapper> menuList) {
+        for(MenuWrapper m : menuList) {
+            m.setSubMenuList(recursion(m));
+        }
+    }
+
+    public List<MenuWrapper> recursion(MenuWrapper m) {
+        List<MenuWrapper> subMenu = menuMapper.getSubMenuById(m.getId());
+        for (MenuWrapper sub : subMenu) {
+            sub.setSubMenuList(recursion(sub));
+        }
+        return subMenu;
+    }
 
     public RespDTO resetPassword(String username, String password, String diffPassword) {
         if (StringUtil.isBlank(username)){

+ 30 - 0
user-service/src/main/java/com/diagbot/mapper/MenuMapper.java

@@ -0,0 +1,30 @@
+package com.diagbot.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.diagbot.entity.Menu;
+import com.diagbot.entity.wrapper.MenuWrapper;
+
+import java.util.List;
+
+/**
+ * @Description: 菜单mapper
+ * @Author: ztg
+ * @Date: 2018/9/14 13:42
+ */
+public interface MenuMapper extends BaseMapper<Menu> {
+
+    /**
+     * @Description: 根据用户id获取菜单
+     * @Author: ztg
+     * @Date: 2018/9/14 13:57
+     */
+    public List<MenuWrapper> getByRole(Long userId);
+
+
+    /**
+     * @Description: 根据id获取子级菜单
+     * @Author: ztg
+     * @Date: 2018/9/14 13:59
+     */
+    public List<MenuWrapper> getSubMenuById(Long id);
+}

+ 13 - 0
user-service/src/main/java/com/diagbot/mapper/UserRoleMapper.java

@@ -0,0 +1,13 @@
+package com.diagbot.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.diagbot.entity.UserRole;
+
+/**
+ * @Description: 用户权限mapper
+ * @Author: ztg
+ * @Date: 2018/9/14 13:42
+ */
+public interface UserRoleMapper extends BaseMapper<UserRole> {
+
+}

+ 13 - 0
user-service/src/main/java/com/diagbot/service/UserRoleService.java

@@ -0,0 +1,13 @@
+package com.diagbot.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.diagbot.entity.UserRole;
+
+/**
+ * @Description: 用户角色service
+ * @Author: ztg
+ * @Date: 2018/9/13 16:55
+ */
+public interface UserRoleService extends IService<UserRole> {
+
+}

+ 20 - 0
user-service/src/main/java/com/diagbot/service/impl/UserRoleServiceImpl.java

@@ -0,0 +1,20 @@
+package com.diagbot.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.diagbot.entity.UserRole;
+import com.diagbot.mapper.UserRoleMapper;
+import com.diagbot.service.UserRoleService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+/**
+ * @Description: 用户角色Service实现类
+ * @Author: ztg
+ * @Date: 2018/9/13 16:56
+ */
+@Service
+@Slf4j
+public class UserRoleServiceImpl extends ServiceImpl<UserRoleMapper, UserRole> implements UserRoleService {
+
+
+}

+ 29 - 0
user-service/src/main/resources/mapper/MenuMapper.xml

@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.diagbot.mapper.MenuMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.diagbot.entity.wrapper.MenuWrapper">
+        <id column="id" property="id" />
+        <result column="is_deleted" property="isDeleted" />
+        <result column="gmt_create" property="gmtCreate" />
+        <result column="gmt_modified" property="gmtModified" />
+        <result column="creator" property="creator" />
+        <result column="name" property="name" />
+        <result column="parent_id" property="parentId" />
+        <result column="code" property="code" />
+        <result column="order_no" property="orderNo" />
+        <result column="remark" property="remark" />
+    </resultMap>
+
+    <select id="getByRole" resultMap="BaseResultMap">
+        select a.* from sys_menu a, sys_role_menu b, sys_user_role c
+        where a.id = b.menu_id and b.role_id and b.role_id = c.role_id and c.user_id = #{userId}
+        and a.is_deleted = 'N' and b.is_deleted = 'N' and c.is_deleted = 'N'
+        ORDER BY a.order_no
+    </select>
+
+    <select id="getSubMenuById" resultMap="BaseResultMap">
+        select a.* from sys_menu a where a.is_deleted = 'N' and parent_id = #{id} ORDER BY order_no
+    </select>
+</mapper>

+ 16 - 0
user-service/src/main/resources/mapper/UserRoleMapper.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.diagbot.mapper.UserRoleMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.diagbot.entity.UserRole">
+        <id column="id" property="id" />
+        <result column="is_deleted" property="isDeleted" />
+        <result column="gmt_create" property="gmtCreate" />
+        <result column="gmt_modified" property="gmtModified" />
+        <result column="creator" property="creator" />
+        <result column="modifier" property="modifier" />
+        <result column="user_id" property="userId" />
+        <result column="role_id" property="roleId" />
+    </resultMap>
+</mapper>