多人审批功能实现
前言
多人审批功能简单实现
一、数据库设计
流程表
CREATE TABLE `system_flow` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
`active` int DEFAULT '1',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
节点表
CREATE TABLE `system_node` (
`id` int NOT NULL AUTO_INCREMENT,
`fid` int DEFAULT NULL,
`name` varchar(255) DEFAULT NULL,
`active` int DEFAULT '1',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10003 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
连接节点表
CREATE TABLE `system_link` (
`id` int NOT NULL AUTO_INCREMENT,
`fid` int DEFAULT NULL,
`name` varchar(255) DEFAULT NULL,
`preNode` int DEFAULT NULL,
`nextNode` int DEFAULT NULL,
`active` int DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10004 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
审批人表
CREATE TABLE `system_approver` (
`id` int NOT NULL AUTO_INCREMENT,
`fid` int DEFAULT NULL,
`node` int DEFAULT NULL,
`userId` int DEFAULT NULL,
`active` int DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10003 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
业务测试表
CREATE TABLE `test_business` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`state` char(1) DEFAULT NULL,
`active` int DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10004 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
业务流程关联表
CREATE TABLE `test_flow_business` (
`id` int NOT NULL AUTO_INCREMENT,
`fid` int DEFAULT NULL,
`busId` int DEFAULT NULL,
`node` int DEFAULT NULL,
`userId` int DEFAULT NULL,
`active` varchar(255) DEFAULT NULL,
`state` char(1) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10006 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
2.实现逻辑
新增接口,增加业务表数据,以及关联表数据,根据上图链路表获取初始节点及审批人更新到业务流程关联表
//
TestBusinessEntity save = testBusinessService.save(testBusiness);
Integer fid = getIntegerParam("fid");
TestFlowBusinessEntity testFlowBusinessEntity = new TestFlowBusinessEntity();
testFlowBusinessEntity.setFid(fid);
//获取下一节点
Integer preNode = 0;
Integer nextNode = systemLinkService.getNextNode(fid,preNode);
testFlowBusinessEntity.setNode(nextNode);
//根据流程与节点获取审批人
Integer Approval = systemApproverService.getApprover(fid,nextNode);
testFlowBusinessEntity.setUserId(Approval);
testFlowBusinessEntity.setBusId(save.getId());
testFlowBusinessEntity.setState("0");
testFlowBusinessService.save(testFlowBusinessEntity);
审批接口,判断审核状态,同意的话进入下一个节点,不同意,结束流程
Integer busId = testFlowBusinessEntity.getBusId();
String state = testFlowBusinessEntity.getState();
Example example = new Example(TestFlowBusinessEntity.class);
example.createCriteria().andEqualTo("busId",busId).andEqualTo("userId",testFlowBusinessEntity.getUserId());
List<TestFlowBusinessEntity> list = testFlowBusinessService.findList(example, null);
TestFlowBusinessEntity testFlowBusinessEntity2 = list.get(0);
Integer fid = testFlowBusinessEntity2.getFid();
Integer node = testFlowBusinessEntity2.getNode();
testFlowBusinessEntity2.setState(state);
testFlowBusinessService.update(testFlowBusinessEntity2);
//判断审核状态,同意的话进入下一个节点,不同意,结束流程
if(state.equals("1")){
//同意
//判断是否是最后一个节点
Integer nextNode = systemLinkService.getNextNode(fid,node);
if(nextNode!=0){
//不是最后一个节点
//新增流程业务表关联数据
TestFlowBusinessEntity testFlowBusinessEntity1 = new TestFlowBusinessEntity();
testFlowBusinessEntity1.setFid(fid);
testFlowBusinessEntity1.setNode(nextNode);
//根据流程与节点获取审批人
Integer Approval = systemApproverService.getApprover(fid,nextNode);
testFlowBusinessEntity1.setUserId(Approval);
testFlowBusinessEntity1.setBusId(busId);
testFlowBusinessEntity1.setState("0");
testFlowBusinessService.save(testFlowBusinessEntity1);
} else {
//最后一个节点,更新业务表状态,流程结束
TestBusinessEntity byId = testBusinessService.findById(busId);
byId.setState(state);
testBusinessService.update(byId);
}
}
if(state.equals("2")){
//不同意
TestBusinessEntity byId = testBusinessService.findById(busId);
byId.setState(state);
testBusinessService.update(byId);
}
查询列表,根据userId,以及状态进行查询分页
SELECT
t1.*
FROM
test_business t1
LEFT JOIN test_flow_business t2 ON t1.id = t2.busId
WHERE
t1.active = 1
AND t2.userId = #{userId}
AND t1.state=#{state}
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgejigc
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01