多人审批功能简单实现


前言

多人审批功能简单实现


一、数据库设计

流程表

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_0900_ai_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_0900_ai_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_0900_ai_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_0900_ai_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_0900_ai_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_0900_ai_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}

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值