背景
在我们的日常开发任务中,有很多的业务是跟审核相关的,业界也有很成熟的工作流框架比如 flowable activiti等,但是项目中如果用这种框架,需要投入一定的时间去学习,这种框架支持的场景很多,但是我们大部分的审核都是比较简单的,综合考虑引入这种框架的成本比较高的时候,我们就可以自己设计一套比较简单的审核表
基础版
这种设计仅支持每个审核节点的审核人都是单个人的,当前节点审核完成后,进入下一个节点审核.
审核节点表
CREATE TABLE `audit_node` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`audit_record_id` bigint DEFAULT NULL COMMENT '审批记录ID,关联audit_record.biz_id',
`step` int DEFAULT NULL COMMENT '步骤',
`step_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '步骤名称',
`audit_status` int DEFAULT NULL COMMENT '审核状态(0:未开始,1:审核中,2:通过,3:拒绝)',
`audit_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '审核人',
`submit_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '审核发起人id',
`reason` varchar(4000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '原因',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=5374 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='审核节点';
审核记录表
CREATE TABLE `audit_record` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`object_id` bigint DEFAULT NULL COMMENT '审核业务表主键',
`audit_status` int DEFAULT NULL COMMENT '审核状态(1:审核中,2:通过,3:拒绝)',
`create_time` datetime NOT NULL COMMENT '创建时间',
`create_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '创建人',
PRIMARY KEY (`id`),
KEY `tenant_audit_record_object_id_audit_type_in_use` (`object_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=4060 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='审核记录';
业务表(业务中需要审核的对象)
CREATE TABLE `product` (
`id` bigint NOT NULL COMMENT '主键',
`product_name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '产品名称',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COMMENT='闲置资源明细';
业务场景:生产经理创建一个产品需要部门经理和部门总监审批通过
-- 新增一个产品
INSERT INTO `my_temp`.`product`(`id`, `product_name`) VALUES (1, '新产品');
-- 新增一条审核记录 状态是审核中
INSERT INTO `my_temp`.`audit_record`(`id`, `object_id`, `audit_status`, `create_time`, `create_by`) VALUES (1, 1, 1, '2024-01-29 15:01:30', '系统');
-- 新增两条审核节点数据
INSERT INTO `my_temp`.`audit_node`(`id`, `audit_record_id`, `step`, `step_name`, `audit_status`, `audit_by`, `submit_by`, `reason`) VALUES (1, 1, 1, '部门经理审批', 1, '部门经理', '生产经理', NULL);
INSERT INTO `my_temp`.`audit_node`(`id`, `audit_record_id`, `step`, `step_name`, `audit_status`, `audit_by`, `submit_by`, `reason`) VALUES (2, 1, 2, '项目总监审批', 1, '项目总监', '部门经理', NULL);
部门经理审批通过
update audit_node set audit_status = 2 ,reason='符合条件通过' where audit_record_id = 1 and step_name = '部门经理审批';
部门总监审批通过
update audit_node set audit_status = 2 ,reason='符合条件通过' where audit_record_id = 1 and step_name = '项目总监审批';
update audit_record set audit_status = 2 where object_id = 1 ;
升级版
基础版仅支持审核节点只有一个人的,升级版就是支持一个节点可以有多个审核人,审核的方式可以是一个人审核通过该节点审核通过或者所有审核人审核通过该节点审核通过(或者多余半数以上的人审核通过).
审核节点和审核人变成了一对多的关系,需要关联关系表
-- 审核记录表
CREATE TABLE `audit_record` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`object_id` bigint DEFAULT NULL COMMENT '审核业务表主键',
`audit_status` int DEFAULT NULL COMMENT '审核状态(1:审核中,2:通过,3:拒绝)',
`create_time` datetime NOT NULL COMMENT '创建时间',
`create_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '创建人',
PRIMARY KEY (`id`),
KEY `tenant_audit_record_object_id_audit_type_in_use` (`object_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=4060 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='租户审核记录';
-- 审核节点表
CREATE TABLE `audit_node` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`audit_record_id` bigint DEFAULT NULL COMMENT '审批记录ID,关联tenant_audit_record.biz_id',
`step` int DEFAULT NULL COMMENT '步骤',
`step_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '步骤名称',
`audit_status` int DEFAULT NULL COMMENT '审核状态(0:未开始,1:审核中,2:通过,3:拒绝)',
`type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '审核方式 1-一个人审核通过即为通过 2-所有人审核通过',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=5374 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='租户审核节点';
--审核人表
CREATE TABLE `audit_node_person` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`audit_node_id` bigint DEFAULT NULL COMMENT '审批节点,关联audit_node',
`person` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '审核人',
`audit_status` int DEFAULT NULL COMMENT '审核状态(0:未开始,1:审核中,2:通过,3:拒绝)',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=5374 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='租户审核节点';