ソースを参照

获取菜单功能

gaodm 4 年 前
コミット
4afbde4a0a

+ 1 - 0
src/main/java/com/diagbot/config/ResourceServerConfigurer.java

@@ -40,6 +40,7 @@ public class ResourceServerConfigurer extends ResourceServerConfigurerAdapter {
                 .antMatchers("/sys/user/getJwt").permitAll()
                 .antMatchers("/sys/user/refreshJwt").permitAll()
                 .antMatchers("/sys/user/checkToken").permitAll()
+                .antMatchers("/sys/user/getUserOrgMenu").permitAll()
                 .antMatchers("/oauth/token").permitAll()
                 .antMatchers("/oauth/check_token").permitAll()
                 .antMatchers("/tran/lisConfig/isExistRecord").permitAll()

+ 1 - 0
src/main/java/com/diagbot/config/security/UrlAccessDecisionManager.java

@@ -83,6 +83,7 @@ public class UrlAccessDecisionManager implements AccessDecisionManager {
                 || matchers("/sys/user/getJwt", request)
                 || matchers("/sys/user/refreshJwt", request)
                 || matchers("/sys/user/checkToken", request)
+                || matchers("/sys/user/getUserOrgMenu", request)
                 || matchers("/oauth/token", request)
                 || matchers("/oauth/check_token", request)
                 || matchers("/tran/lisConfig/isExistRecord", request)

+ 35 - 0
src/main/java/com/diagbot/dto/HospitalLoginDTO.java

@@ -0,0 +1,35 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author wangfeng
+ * @Description:
+ * @date 2020-07-29 11:09
+ */
+@Getter
+@Setter
+public class HospitalLoginDTO {
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 医院编码
+     */
+    private String code;
+
+    /**
+     * 医院名称
+     */
+    private String name;
+
+    /**
+     * 是否对接(0-不对接,1-对接)
+     */
+    private Integer connect;
+
+}
+

+ 20 - 0
src/main/java/com/diagbot/dto/LoginDTO.java

@@ -0,0 +1,20 @@
+package com.diagbot.dto;
+
+import com.diagbot.entity.wrapper.SysMenuWrapper;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * @Description: 登录输出类
+ * @author: gaodm
+ * @time: 2018/8/2 14:22
+ */
+@Getter
+@Setter
+public class LoginDTO {
+    private UserLoginDTO userLoginDTO;
+    private HospitalLoginDTO hospitalLoginDTO;
+    private List<SysMenuWrapper> menuWrappers;
+}

+ 40 - 0
src/main/java/com/diagbot/dto/UserLoginDTO.java

@@ -0,0 +1,40 @@
+package com.diagbot.dto;
+
+import com.diagbot.enums.ConstantEnum;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description: 登录返回的用户信息
+ * @author: gaodm
+ * @time: 2018/9/28 15:10
+ */
+@Getter
+@Setter
+public class UserLoginDTO {
+
+    /**
+     * 用户名
+     */
+    private String username;
+
+    /**
+     * 联系人
+     */
+    private String linkman;
+
+    /**
+     * 用户类型
+     */
+    private Integer type;
+
+    /**
+     * 用户类型中文
+     */
+    private String typeCn;
+
+
+    public String getTypeCn() {
+        return ConstantEnum.getName(this.type);
+    }
+}

+ 81 - 0
src/main/java/com/diagbot/entity/SysMenu.java

@@ -0,0 +1,81 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 系统菜单
+ * </p>
+ *
+ * @author gaodm
+ * @since 2020-04-12
+ */
+@Getter
+@Setter
+public class SysMenu implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @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 String name;
+
+    /**
+     * -1:表示顶级,其他值表示上级菜单的id
+     */
+    private Long parentId;
+
+    /**
+     * 编码,与前端对应
+     */
+    private String code;
+
+    /**
+     * 排序,从小到大
+     */
+    private Integer orderNo;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+}

+ 19 - 0
src/main/java/com/diagbot/entity/wrapper/SysMenuWrapper.java

@@ -0,0 +1,19 @@
+package com.diagbot.entity.wrapper;
+
+import com.diagbot.entity.SysMenu;
+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 SysMenuWrapper extends SysMenu {
+    private List<SysMenuWrapper> subMenuList = new ArrayList<>();
+}

+ 14 - 0
src/main/java/com/diagbot/facade/SysMenuFacade.java

@@ -0,0 +1,14 @@
+package com.diagbot.facade;
+
+import com.diagbot.service.impl.SysMenuServiceImpl;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Description: 菜单
+ * @Author: ztg
+ * @Date: 2018/9/17 18:32
+ */
+@Component
+public class SysMenuFacade extends SysMenuServiceImpl {
+
+}

+ 86 - 0
src/main/java/com/diagbot/facade/SysUserFacade.java

@@ -2,10 +2,16 @@ package com.diagbot.facade;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.diagbot.client.AuthServiceClient;
+import com.diagbot.dto.HospitalInfoDTO;
+import com.diagbot.dto.HospitalLoginDTO;
 import com.diagbot.dto.JwtDTO;
+import com.diagbot.dto.LoginDTO;
+import com.diagbot.dto.UserLoginDTO;
+import com.diagbot.entity.HospitalInfo;
 import com.diagbot.entity.JWT;
 import com.diagbot.entity.JwtStore;
 import com.diagbot.entity.SysUser;
+import com.diagbot.entity.wrapper.SysMenuWrapper;
 import com.diagbot.enums.ConstantEnum;
 import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.enums.StatusEnum;
@@ -13,7 +19,10 @@ import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
 import com.diagbot.exception.ServiceErrorCode;
 import com.diagbot.service.impl.SysUserServiceImpl;
+import com.diagbot.util.BeanUtil;
 import com.diagbot.util.DateUtil;
+import com.diagbot.util.EntityUtil;
+import com.diagbot.util.ListUtil;
 import com.diagbot.util.StringUtil;
 import com.diagbot.util.SysUserUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -22,6 +31,10 @@ import org.springframework.security.crypto.password.PasswordEncoder;
 import org.springframework.security.oauth2.common.OAuth2AccessToken;
 import org.springframework.stereotype.Component;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
 /**
  * @Description: 用户业务层
  * @author: gaodm
@@ -36,6 +49,12 @@ public class SysUserFacade extends SysUserServiceImpl {
     @Autowired
     private AuthServiceClient authServiceClient;
 
+    @Autowired
+    private SysMenuFacade sysMenuFacade;
+
+    @Autowired
+    private HospitalInfoFacade hospitalInfoFacade;
+
     /**
      * 获取jwt
      *
@@ -180,4 +199,71 @@ public class SysUserFacade extends SysUserServiceImpl {
         return true;
     }
 
+    /**
+     * 登录
+     *
+     * @return 登录相关信息
+     */
+    public LoginDTO getUserOrgMenu() {
+        LoginDTO data = new LoginDTO();
+
+        Long userId = Long.parseLong(SysUserUtils.getCurrentPrincipleID());
+        SysUser user = this.getOne(new QueryWrapper<SysUser>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("status", StatusEnum.Enable.getKey())
+                .eq("id", userId), false);
+        if (user == null) {
+            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR,
+                    "用户不存在【" + userId + "】");
+        }
+        //添加用户
+        UserLoginDTO userLoginDTO = new UserLoginDTO();
+        BeanUtil.copyProperties(user, userLoginDTO);
+        data.setUserLoginDTO(userLoginDTO);
+
+        //添加医院信息
+        if (user.getType().equals(ConstantEnum.OUTER_USER.getKey())) {
+            QueryWrapper<HospitalInfo> queryWrapper = new QueryWrapper<>();
+            queryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
+                    .eq("id", SysUserUtils.getCurrentHospitalID());
+            HospitalInfo hospitalInfo = hospitalInfoFacade.getOne(queryWrapper, false);
+            HospitalLoginDTO hospitalLoginDTO = new HospitalLoginDTO();
+            BeanUtil.copyProperties(hospitalInfo, hospitalLoginDTO);
+            data.setHospitalLoginDTO(hospitalLoginDTO);
+        }
+
+        //添加菜单信息
+        List<SysMenuWrapper> menuList = sysMenuFacade.getByRole(user.getId());
+        Map<Long, List<SysMenuWrapper>> menuMap = EntityUtil.makeEntityListMap(menuList, "parentId");
+        List<SysMenuWrapper> menuRes = menuMap.get(-1L);
+        if (ListUtil.isNotEmpty(menuRes)){
+            for (SysMenuWrapper bean : menuRes) {
+                getSonMenu(bean, menuMap);
+            }
+        }
+        data.setMenuWrappers(menuRes);
+        return data;
+    }
+
+
+    /**
+     * 递归获取菜单结构
+     *
+     * @param menu    当前菜单
+     * @param menuMap 菜单集
+     * @return 菜单结构
+     */
+    public List<SysMenuWrapper> getSonMenu(SysMenuWrapper menu,
+                                           Map<Long, List<SysMenuWrapper>> menuMap) {
+        List<SysMenuWrapper> res = new ArrayList<>();
+        List<SysMenuWrapper> list = menuMap.get(menu.getId());
+        if (ListUtil.isNotEmpty(list)) {
+            menu.setSubMenuList(list);
+            for (SysMenuWrapper bean : list) {
+                getSonMenu(bean, menuMap);
+            }
+        }
+        return res;
+    }
+
 }

+ 33 - 0
src/main/java/com/diagbot/mapper/SysMenuMapper.java

@@ -0,0 +1,33 @@
+package com.diagbot.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.diagbot.entity.SysMenu;
+import com.diagbot.entity.wrapper.SysMenuWrapper;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 系统菜单 Mapper 接口
+ * </p>
+ *
+ * @author gaodm
+ * @since 2020-04-12
+ */
+public interface SysMenuMapper extends BaseMapper<SysMenu> {
+    /**
+     * @Description: 根据用户id获取菜单
+     * @Author: ztg
+     * @Date: 2018/9/14 13:57
+     */
+    public List<SysMenuWrapper> getByRole(Long userId);
+
+
+    /**
+     * @Description: 根据id获取子级菜单
+     * @Author: ztg
+     * @Date: 2018/9/14 13:59
+     */
+    public List<SysMenuWrapper> getSubMenuById(Long id);
+
+}

+ 34 - 0
src/main/java/com/diagbot/service/SysMenuService.java

@@ -0,0 +1,34 @@
+package com.diagbot.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.diagbot.entity.SysMenu;
+import com.diagbot.entity.wrapper.SysMenuWrapper;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 系统菜单 服务类
+ * </p>
+ *
+ * @author gaodm
+ * @since 2020-04-12
+ */
+public interface SysMenuService extends IService<SysMenu> {
+
+    /**
+     * @Description: 获取菜单信息
+     * @Author: ztg
+     * @Date: 2018/9/17 15:43
+     */
+    public List<SysMenuWrapper> getByRole(Long userId);
+
+
+    /**
+     * @Description: 获取子级菜单
+     * @Author: ztg
+     * @Date: 2018/9/17 15:44
+     */
+    public List<SysMenuWrapper> getSubMenuById(Long id);
+
+}

+ 45 - 0
src/main/java/com/diagbot/service/impl/SysMenuServiceImpl.java

@@ -0,0 +1,45 @@
+package com.diagbot.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.diagbot.entity.SysMenu;
+import com.diagbot.entity.wrapper.SysMenuWrapper;
+import com.diagbot.mapper.SysMenuMapper;
+import com.diagbot.service.SysMenuService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 系统菜单 服务实现类
+ * </p>
+ *
+ * @author gaodm
+ * @since 2020-04-12
+ */
+@Service
+public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> implements SysMenuService {
+
+    /**
+     * 根据用户id获取菜单信息
+     *
+     * @param userId 用户id
+     * @return 菜单信息
+     */
+    @Override
+    public List<SysMenuWrapper> getByRole(Long userId) {
+        return baseMapper.getByRole(userId);
+    }
+
+    /**
+     * 获取下级菜单
+     *
+     * @param id 菜单id
+     * @return 子菜单信息
+     */
+    @Override
+    public List<SysMenuWrapper> getSubMenuById(Long id) {
+        return baseMapper.getSubMenuById(id);
+    }
+
+}

+ 11 - 0
src/main/java/com/diagbot/web/SysUserController.java

@@ -2,6 +2,7 @@ package com.diagbot.web;
 
 import com.diagbot.annotation.SysLogger;
 import com.diagbot.dto.JwtDTO;
+import com.diagbot.dto.LoginDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.entity.Token;
 import com.diagbot.facade.SysUserFacade;
@@ -86,4 +87,14 @@ public class SysUserController {
         return RespDTO.onSuc(flag);
     }
 
+    @ApiOperation(value = "获取用户、医院、菜单信息[by:gaodm]",
+            notes = "")
+    @PostMapping("/getUserOrgMenu")
+    @SysLogger("getUserOrgMenu")
+    public RespDTO<LoginDTO> getUserOrgMenu() {
+        LoginDTO data = userFacade.getUserOrgMenu();
+        return RespDTO.onSuc(data);
+    }
+
+
 }

+ 31 - 0
src/main/resources/mapper/SysMenuMapper.xml

@@ -0,0 +1,31 @@
+<?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.SysMenuMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.diagbot.entity.wrapper.SysMenuWrapper">
+        <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="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 distinct 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.parent_id , 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>