这个项目主要是用于公司流程管理的。用户通过编辑流程模板,生成自定义事务流程的处理模板,其他用户就可以通过这个模板发起事务流程。比如某个管理员用户设定了一个员工请假的流程模板,里面设置了流请假程的处理步骤和处理人员,其他员工就可以通过这个模板,提起请假流程。
主要功能:
- 用户管理
- 流程模板管理
- 流程管理
前端代码仓库:https://github.com/YuboerChang/housekeep-frontend
后端代码仓库:https://github.com/YuboerChang/housekeep
业务逻辑
用户管理
- 用户参数
- 用户id(工号),用户名,用户密码,用户手机号码,用户简介
- 所属部门:设置层级,如信息技术部/应用开发中心/APP开发组
- 头像:用户自行上传
- 用户类型:跟用户职级相关,例:普通用户:组长:中心主管:部门主管:总经理:部门综合员:内部审查员。
- 用户管理功能
- 注册:由管理员进行登记注册。
- 登录:用户使用id和密码进行登录,登录后可自行修改密码及其它信息(用户手机号码、用户简介、头像),系统不设置强制修改密码。
- 用户注销:由管理员进行注销。
- 用户信息强制修改:由管理员进行强制修改,仅允许修改用户类型和用户所属部门。
流程管理
- 流程管理
- 增加流程
- 参数:当前步骤、当前处理对象(可多个)、下一个处理对象、下一个步骤、类别、标题、内容、是否通过标识、传阅对象(可多个)。流程编号(自动生成)、时间戳(自动生成)
- 过程:用户填写流程信息,发起流程,流程自动通知下一步的处理人员和传阅人员。
- 删除流程
- 参数:流程编号、时间戳(自动生成)权限:发起人,管理员
- 过程:对流程进行删除,不需要删除数据,终止流程即可。增加操作记录,操作记录保留。
- 流程自行回退
- 参数:流程编号、回退原因、时间戳(自动生成)
- 过程:对流程进行回退,状态改为发起状态,可修改流程内容,原审批和传阅信息失效,需重新发起审批。增加操作记录,操作记录保留。
- 权限:发起人
- 流程审批
- 参数:流程编号、审批意见、时间戳(自动生成)
- 过程:如不通过,进行流程回退,所有审核状态和传阅状态失效,状态改为发起状态,需重新发起审批。操作记录保留。如通过,流程到达下一个步骤。增加操作记录。
- 权限:当前步骤处理人
- 流程不可更改(如需更改自行退后后修改)。
- 增加流程
- 流程模板管理
- 增加流程模板
- 参数:流程类型(流程名字)、流程步骤、步骤参与人员类型、流程模板(编号自动生成)、时间戳(自动生成)
- 从业务层面来看,流程的编号本身也可识别其类型。
- 业务类型细分
- 人事
- 假期
- 财务
- 岗位
- 考核
- 会议
- 会议室
- 会议
- 部门
- 部门物资
- 部门人员
- 部门通知
- 人事
- 其实从业务类型设定来看,这一块也是可以做成自定义的,不过自由度可能过高了,难免导致有不同的管理员把分类改来改去的,还是定个大概的框架,再由管理员设置具体的流程模板比较合适。
- 权限:管理员
- 过程:用户自行填写流程步骤和参与人员类型,也可根据已有模板导入修改。增加操作记录。
- 参数:流程类型(流程名字)、流程步骤、步骤参与人员类型、流程模板(编号自动生成)、时间戳(自动生成)
- 删除流程模板
- 参数:流程编号、时间戳(自动生成)
- 过程:对流程模板进行删除,不需要删除数据,标记失效即可。不影响已创建的流程的使用。增加操作记录,操作记录保留。
- 权限:管理员
- 增加流程模板
-
- 更改流程模板
- 参数:流程编号、时间戳(自动生成)
- 过程:对流程模板进行修改,不影响已创建流程的使用。增加操作记录。
- 权限:管理员
- 更改流程模板
SQL
默认utf8字符编码,字符存储不区分大小写。数据库需要新建一个特定的用户。
create database applys character set utf8 collate utf8_general_ci;
- 建立数据库的用户
create user manager@localhost identified by '123456';
grant all privileges on applys.* to manager@localhost;
flush privileges;
用户管理
- 用户表
- ID
- 即用户的工号,一般为6个数字。使用mediumint即可
- 用户名
- varchar,长度设置不超过32个字符
- 用户类型
- varchar,长度设置不超过32个字符
- 不考虑采用映射,主要是便于理解,防止后期出现过多的近似角色难以区分
- 用户简介
- varchar,长度不超过255个字符。
- 用户密码
- 数据库添加数据时需加密,使用varchar,数据库层面不加密。长度不超过32个字符
- 头像
- 目前头像一般都支持几个MB的图片,使用mediumblob即可
- 用户手机号码
- varchar,长度为11
- 所属部门
- 分层,每一层用一个英文逗号分隔
- varchar,长度64
- ID
drop table if exists user;
create table user (
id varchar(6) primary key,
password varchar(32) not null,
name varchar(32) not null,
introduce varchar(255),
phone varchar(11),
picture mediumblob,
role varchar(32),
department varchar(64)
) character set = utf8 collate = utf8_general_ci comment = '用户' row_format = dynamic;
流程管理
- 流程记录表
- ID
- 模板已经可以确定是什么类型的流程,只需要区分不同流程即可。采用自增ID即可,假设公司每天发起流程1万条,一年365万个记录,数据库存储10年的数据,那么会有3650个记录,类型使用int即可。
- 对应的流程模板
- 外键,DB不处理
- 流程名称
- 流程简介
- 创建者
- 是否完成标志
- 当前步骤
- ID
drop table if exists apply;
create table apply (
id int unsigned primary key auto_increment,
template_id mediumint not null,
name varchar(20),
introduce varchar(100),
creator_id varchar(20),
is_finish tinyint(1),
create_time timestamp
) auto_increment=1 character set = utf8 collate = utf8_general_ci comment = '流程' row_format = dynamic;
- 流程步骤记录表
- 当前步骤ID
- 当前步骤名称
- 当前步骤处理意见
- 当前步骤处理人
- 当前步骤未阅读通知人员
- 这个通知人员可能会涉及多人,如一个部门通知,可能涉及200人,一个编号假设占6个字符,则需1200个字符,算上分隔字符,预留空间,可以设置到2048个字符。
- 已阅读通知人员
drop table if exists apply_step;
create table apply_step (
apply_id int unsigned ,
step_id tinyint,
worker int unsigned,
opinion varchar(100),
un_read varchar(2048),
has_read varchar(2048),
introduce varchar(100),
template_step_id tinyint,
create_time timestamp,
primary key (apply_id, step_id)
) character set = utf8 collate = utf8_general_ci comment = '流程步骤' row_format = dynamic;
- 流程模板记录表
- ID
- 主键,考虑到流程模板的归类,设置为固定长度的数字,假设流程大类数量在10以内,细分类型数量在10以内,一种类型的流程模板数量在100以内。
- 对于存储空间的考虑,这张表不会多大,存满也就10,000行数据,空间其实差异不大。用char是4个字节,操作上也比较容易。
- 例:1010,可表示,人事,假期,调休流程。
- 固定位数4位,第1位表示大类,第2位表示细分类型,第3-4位表示流程模板标识数字。
- 名称
- 中文或英文,长度可变,最大长度限制在20个字符内。
- 简介
- 中文或英文,长度可变,最大长度限制在100个字符内。
- 创建者
- 用户ID外键,不过表层面没必要加外键约束,在service层处理。
- 是否生效
- tinyint(1)
- 创建时间
- timestamp
- ID
drop table if exists apply_template;
create table apply_template (
id varchar(4) primary key,
name varchar(20),
introduce varchar(100),
creator_id varchar(20),
is_valid tinyint(1),
create_time timestamp
) character set = utf8 collate = utf8_general_ci comment = '流程模板' row_format = dynamic;
- 流程模板步骤记录表
- 流程模板ID
- 流程模板ID外键,主键之一
- 流程步骤
- 主键之一
- 假设一个流程步骤不会超过10步,那么使用tinyint即可
- 下一流程步骤
- tinyint
- 如果值为0则表示没有下一步,流程结束
- 参与者用户类型
- 非空,因为每个步骤都应当有参与者,每个步骤只固定一个必需的参与审批角色。
- char
- 简介
- 可""
- 流程模板ID
drop table apply_template_step if exits;
create table apply_template_step (
template_id mediumint unsigned,
step_id tinyint,
participants char(1),
introduce varchar(100),
primary key (template_id, step_id)
) character set = utf8 collate = utf8_general_ci comment = '流程模板步骤' row_format = dynamic;