1. 项目背景

公司随着业务的增长各个管理系统越来越多,导致运营以及销售等同学需要频繁的登录不同的系统,以及行政在员工入职离职需要操作多个系统。

2. 重构目标

  • 统一现有各个管理系统用户、组织架构,员工维护、组织架构维护
  • 实现单点登录
  • 通过API接口提供给其他系统员工数据

3. 重构方案

公司目前正在使用企业微信,且企业微信拥有完善的开放API,所以决定以企业微信为主进行重构。由于用户数据关系相对简单并且访问量大,决定使用 Redis 缓存全部数据,mysql 作为数据备份。

3.1 解决思路:

image

这里我选择禁止在企业微信后台添加编辑员工,所有员工操作由员工管理平台编辑,再将变更调用API推送至企业微信。主要解决用户唯一标识生成的问题,其次如果双端都开放编辑功能,将会大大增加服务的复杂度。

3.2 解决方案

image

如图所示员工中心服务分为两部分,Service 层 与 API 层。

  • 所以业务逻辑全部封装在 Service 层并提供功能接口
  • 除通用功能接口以外,提供如权限等服务需要的定制接口
  • API 层封装对外暴露的接口,增加登录状态检测的过滤器

3.3 Service层功能列表

模块功能备注
1. 企业微信API封装1.1 员工创建/编辑API调用
-1.2 删除员工API调用
-1.3 部门创建/编辑API调用
-1.4 删除部门API调用
2. 员工管理(通用)2.1 员工创建/编辑绑定系统角色、权限
-2.2 员工激活邮件发送
-2.3 员工激活
-2.4 设置密码系统管理员操作
-2.5 找回密码邮件发送员工通过企业邮箱自行找回
-2.6 找回密码
-2.7 获取员工信息
-2.8 获取员工信息(批量)
-2.9 获取员工简要信息姓名、头像
-2.10 获取员工简要信息(批量)
-2.11 根据部门获取员工列表
3. 部门管理(通用)3.1 部门创建/编辑
-3.2 获取部门列表(树形结构)
-3.3 获取子部门列表(树形结构)根据某个部门获取以下部门数据
-3.4 获取部门名称
-3.5 获取部门名称(批量)
4. 登录授权4.1 账号密码登录
-4.2 手机号密码登录
-4.3 企业微信扫码登录
-4.4 检测登录状态根据 Token
-4.5 获取登录用户信息根据 Token
5. 数据缓存5.1 全部员工数据缓存
-5.2 根据部门员工数据缓存
-5.3 全部部门数据缓存
6. 员工管理定制接口6.1 检测用户状态(批量)根据用户ID查询是否在职
-6.2 获取上级部门拥有指定角色的用户ID

3.4 API层功能列表

模块功能备注
1. 员工管理1.1 根据部门获取员工列表
1.2 获取员工详细信息
1.3 员工激活邮件发送
1.4 员工激活
1.5 找回密码邮件发送
1.6 找回密码
2. 部门管理2.1 获取部门列表(树形结构)
3. 数据缓存3.1 全部员工数据缓存
3.2 根据部门员工数据缓存
3.3 全部部门数据缓存
4. 登录授权4.1 账号密码登录
4.2 手机号密码登录
4.3 企业微信扫码登录

3.5 数据库设计:

  • 员工信息表
  • 部门信息表
  • 员工部门关系表(一个员工可能属于多个部门)

3.6 用户模块 Redis 设计:

  • 账号对应用户标识

    • Key:账号
    • Value:用户标识
    • 用户使用账号+密码登录时使用
  • 手机号对应用户标识

    • Key:手机号
    • Value:用户标识
    • 用户使用手机号+密码登录时使用
  • 用户标识对应所属部门

    • Key:用户标识
    • Value:所属部门数组(转换JSON字符串)
    • 用户使用手机号+密码登录时使用
  • 用户标识对应用户信息

    • Key:用户标识
    • Value:用户信息(转换JSON字符串)
    • 查询用户详情,这里将用户相关将会使用的数据全部存储。列如:系统角色、所属部门、系统权限...等。
  • 用户标识对应姓名

    • Key:用户标识
    • Value:姓名
    • 其他服务需要将用户标识转换姓名是使用

3.7 部门模块 Redis 设计:

  • 部门下所有子部门标识数组

    • Key: 部门标识
    • Value:子部门标识数组(转换JSON字符串)
    • 主要提供给权限服务使用
  • 部门下所有用户标识

    • Key: 部门标识
    • Value:用户标识数组(转换JSON字符串)
    • 提供用户权限服务
  • 部门下子部门树形结构

    • Key: 部门标识
    • Value:子部门树形结构保护当前部门(转换JSON字符串)
    • 通讯录等功能展示使用

3.8 登录模块 Redis 设计:

  • 用户标识对应登录令牌

    • Key: 用户标识
    • Value:登录令牌
    • 登出以及检测用户是否已登录(登录互斥)时使用
  • 登录令牌对应用户标识

    • Key: 登录令牌
    • Value:用户标志
    • 检测用户是否登录时使用

4. 登录授权以及获取用户信息顺序图

image


zhanghongwei
14 声望3 粉丝

引用和评论

0 条评论