美文网首页
SpringBoot实例:医院统一信息平台(完成用户系统)

SpringBoot实例:医院统一信息平台(完成用户系统)

作者: 碧波之心 | 来源:发表于2018-06-15 18:48 被阅读119次

    就如前一节讲的,其它没有新知识点的内容就不再重复了。描述下业务。

    业务

    1. 权限:权限是一个树结构的数据,每个权限对应业务一个功能。通过关联到用户后,控制用户可以或者不可以使用某功能;
    2. 角色:另外一个维度(前面讲了组织的维度)对用户分组的单位。对角色关联权限。相应角色的用户就关联了权限;
    3. 用户组织关联和用户角色关联:记录用户分组关系的数据。

    数据模型

    权限

    package com.biboheart.huip.user.domain;
    
    import java.io.Serializable;
    
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.Table;
    
    import lombok.Data;
    
    @Data
    @Entity
    @Table(name = "bh_user_authority")
    public class Authority implements Serializable {
        private static final long serialVersionUID = 8644054050270458500L;
        
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Integer id;
        private Integer pid; // 父权限ID
        private String sn; // 权限编号
        private String name; // 权限名称
    }
    

    角色

    package com.biboheart.huip.user.domain;
    
    import java.io.Serializable;
    
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.Table;
    
    import lombok.Data;
    
    @Data
    @Entity
    @Table(name = "bh_user_user")
    public class Role implements Serializable {
        private static final long serialVersionUID = -395701688680020217L;
    
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Integer id;
        private String sn; // 角色编号
        private String name; // 角色名称
        private String aids; // 权限ID,用"()"分隔起来的权限ID
        private Long createTime; // 创建时间
        private Long updateTime; // 最后修改时间
    }
    

    用户组织

    package com.biboheart.huip.user.domain;
    
    import java.io.Serializable;
    
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.Table;
    
    import lombok.Data;
    
    @Data
    @Entity
    @Table(name = "bh_user_user_org")
    public class UserOrg implements Serializable {
        private static final long serialVersionUID = 2439488455909891027L;
        
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;
        private Long uid; // 用户ID
        private Integer oid; // 组织ID
        private Integer otid; // 组织的类型ID
        private String otname; // 组织类型名称
        private String oname; // 组织名称
        private String opath; // 组织路径,如:XX集团>XX医院>XX科室
    }
    

    用户角色

    package com.biboheart.huip.user.domain;
    
    import java.io.Serializable;
    
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.Table;
    
    import lombok.Data;
    
    @Data
    @Entity
    @Table(name = "bh_user_user_role")
    public class UserRole implements Serializable {
        private static final long serialVersionUID = -8598191284860231216L;
    
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;
        private Long uid; // 用户ID
        private Integer rid; // 角色ID
        private String rname; // 角色名称
    }
    

    关键的文件目录


    文件目录

    特别说明

    为了方便使用,用户服务增加一个接口,取当前用户

        @Override
        public User current() {
            Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
            if(null == authentication) {
                return null;
            }
            String username = null;
            if (!(authentication instanceof AnonymousAuthenticationToken)) {
                username = authentication.getName();
            }
            if(CheckUtils.isEmpty(username)) {
                return null;
            }
            Account account = accountRepository.findByUsername(username);
            if (null == account || CheckUtils.isEmpty(account.getUid())) {
                return null;
            }
            User user = userRepository.findById(account.getUid()).get();
            return user;
        }
    

    组织列表增加对用户所在组织的判断

        @RequestMapping(value = "/userapi/user/org/list", method = {RequestMethod.POST, RequestMethod.GET})
        public BhResponseResult<?> list(String ids, String pids, String otids, String otsns, Integer descendant, Integer parents, String match) {
            List<Integer> inIdList = PrimaryTransverter.idsStr2List(ids);
            List<Integer> inOtidList = PrimaryTransverter.idsStr2List(otids);
            if(!CheckUtils.isEmpty(otsns)) {
                String[] otSnArr = otsns.split(",");
                for(String otSn : otSnArr) {
                    OrgType ot = orgTypeService.load(null, otSn);
                    if(null == ot) {
                        continue;
                    }
                    if(null == inOtidList) {
                        inOtidList = new ArrayList<>();
                    }
                    if(!inOtidList.contains(ot.getId())) {
                        inOtidList.add(ot.getId());
                    }
                }
            }
            User user = userService.current();
            if (null != user) {
                List<UserOrg> uos = userOrgService.list(user.getId());
                List<Integer> userAllowOidList = null;
                if (!CheckUtils.isEmpty(uos)) {
                    List<Integer> userOidList = new ArrayList<>();
                    for (UserOrg uo : uos) {
                        userOidList.add(uo.getOid());
                    }
                    userAllowOidList = orgService.listId(null, userOidList, null, 1, null);
                }
                if (CheckUtils.isEmpty(userAllowOidList)) {
                    inIdList = new ArrayList<>();
                    inIdList.add(0);
                } else {
                    if (CheckUtils.isEmpty(inIdList)) {
                        inIdList = userAllowOidList;
                    } else {
                        // 取交集
                        inIdList = ListUtils.intersectionList(inIdList, userAllowOidList);
                    }
                }
            }
            List<Integer> inPidList = PrimaryTransverter.idsStr2List(pids);
            List<Org> orgs = orgService.list(inIdList, inPidList, inOtidList, descendant, parents, match);
            return new BhResponseResult<>(0, "success", orgs);
        }
    

    总结

    到此,用户系统服务端的基本功能已经完成。接下先做点前端的界面。这一系列就暂停几天。
    具体代码请查看git:https://gitee.com/biboheart/huip.git

    相关文章

      网友评论

          本文标题:SpringBoot实例:医院统一信息平台(完成用户系统)

          本文链接:https://www.haomeiwen.com/subject/dswmeftx.html