• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

多人审批功能实现

武飞扬头像
一场梦@bhl
帮助1


前言

多人审批功能简单实现


一、数据库设计

流程表

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
系列文章
更多 icon
同类精品
更多 icon
继续加载