初学Activiti工作流

用处:审批流程的封装运用

多说无益,动手更加容易理解,下载官网activiti-app.war启动运行
从创建用户-编辑流程图-发布-最后测试的一条龙服务在下方连接中已展现的淋漓尽致
https://blog.csdn.net/lxxiang1/article/details/82284899

一顿操作之后现在已经基本有Activiti的概念了,那怎么运用到项目中呐?请继续往下撸
springboot+Activiti5.22
1.导入pom

	<!--activiti end-->
	<dependency>
		<groupId>org.activiti</groupId>
		<artifactId>activiti-engine</artifactId>
		<version>${activiti.version}</version>
	</dependency>

	<dependency>
		<groupId>org.activiti</groupId>
		<artifactId>activiti-spring</artifactId>
		<version>${activiti.version}</version>
	</dependency>

	<dependency>
		<groupId>org.activiti</groupId>
		<artifactId>activiti-modeler</artifactId>
		<version>${activiti.version}</version>
	</dependency>

	<dependency>
		<groupId>org.activiti</groupId>
		<artifactId>activiti-diagram-rest</artifactId>
		<version>${activiti.version}</version>
	</dependency>
	<!--activiti end-->

2.配置数据库连接,及Activiti的Config类

@Configuration
public class Cfg_Activiti {

	//流程配置,与spring整合采用SpringProcessEngineConfiguration这个实现
    @Bean
    public ProcessEngineConfiguration processEngineConfiguration(DataSource dataSource, PlatformTransactionManager transactionManager){
        SpringProcessEngineConfiguration processEngineConfiguration = new SpringProcessEngineConfiguration();
        processEngineConfiguration.setDataSource(dataSource);
        //none省略数据库版本检查
        processEngineConfiguration.setDatabaseTablePrefix("OYDGHR.");
        processEngineConfiguration.setDatabaseSchemaUpdate("none");
        processEngineConfiguration.setDatabaseType("postgres");
	//        dbIdentityUsed
        processEngineConfiguration.setDbIdentityUsed(false);
        processEngineConfiguration.setTransactionManager(transactionManager);


        //流程图字体
        processEngineConfiguration.setActivityFontName("宋体");
        processEngineConfiguration.setAnnotationFontName("宋体");
        processEngineConfiguration.setLabelFontName("宋体");

        return processEngineConfiguration;
    }

    //流程引擎,与spring整合使用factoryBean
    @Bean
    public ProcessEngineFactoryBean processEngine(ProcessEngineConfiguration processEngineConfiguration){
        ProcessEngineFactoryBean processEngineFactoryBean = new ProcessEngineFactoryBean();
        processEngineFactoryBean.setProcessEngineConfiguration((ProcessEngineConfigurationImpl) processEngineConfiguration);
        return processEngineFactoryBean;
    }

    //八大接口
    @Bean
    public RepositoryService repositoryService(ProcessEngine processEngine){
        return processEngine.getRepositoryService();
    }

    @Bean
    public RuntimeService runtimeService(ProcessEngine processEngine){
        return processEngine.getRuntimeService();
    }

    @Bean
    public TaskService taskService(ProcessEngine processEngine){
        return processEngine.getTaskService();
    }

    @Bean
    public HistoryService historyService(ProcessEngine processEngine){
        return processEngine.getHistoryService();
    }

    @Bean
    public FormService formService(ProcessEngine processEngine){
        return processEngine.getFormService();
    }

    @Bean
    public IdentityService identityService(ProcessEngine processEngine){
        return processEngine.getIdentityService();
    }

    @Bean
    public ManagementService managementService(ProcessEngine processEngine){
        return processEngine.getManagementService();
    }

    @Bean
    public DynamicBpmnService dynamicBpmnService(ProcessEngine processEngine){
        return processEngine.getDynamicBpmnService();
    }

    //八大接口 end
}

配好之后运行自己的项目,此时Activiti框架源码activiti-engine-5.22.0.jar包中的db中create文件里面会
根据你ProcessEngineConfiguration.setDatabaseType()来根据你选择数据库类型执行对应的sql文件。
create table 。。。。ing
启动成功后去数据库浏览一下,25张表缺一不可
这些表都是干嘛的呐,结合以下链接学习
https://blog.csdn.net/hj7jay/article/details/51302829

3.数据库也准备好了可以开始编码了吗?

先解决流程图编辑发布的问题
找寻流程编辑工具或插件
(1)官网下载war,tomcat运行编辑流程图导出xml
(2)idea下载actiBPM插件,创建Bpmnfile文件编辑流程图,导出xml

话外音:可编辑流程直接保存数据库的demo已经准备好,https://github.com/DangerousPrayer/spring-boot-with-activiti.git
流程编辑发布后,可在ACT_GE_BYTEARRAY表中查看

4.此时外部工作已经就绪那就开始编码吧

先了解一下操作流程八大接口
(1)创建用户与用户组(这步操作其实该在编辑流程图前完成,因为编辑器的每个审批节点都需要配置审批人,
修改Assignment,选择id或者value,为了灵活一般都是配置候选人和候选人组),此时对应表的ACT_ID_USER、
ACT_ID_GROUP、ACT_ID_MEMBERSHIP已有数据

(2)启动实例流程(ACT_RU_TASK表会产生数据)
	@Test
	public void flowStart() throws Exception{
		//启动流程实例,字符串"vacation"是BPMN模型文件里process元素的id
		ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("vacation");
		System.out.println(processInstance.getId());
	}

(3)启动流程之后,第一个流程节点审批人就可以获取自己的待审批列表
	@Test
	public void list(){
		//查出当前登录用户所在的用户组
		List<Group> groups = identityService.createGroupQuery()
				.groupMember(String.valueOf("节点审批人ID")).list();
		List<String> groupNames = groups.stream()
				.map(group -> group.getName()).collect(Collectors.toList());
		/**查询用户组的待审批流程列表
		*		SELECT DISTINCT *
		*		FROM
		*		  ACT_RU_TASK RES
		*		  INNER JOIN ACT_RU_IDENTITYLINK I
		*			ON I.TASK_ID_ = RES.ID_
		*		WHERE RES.ASSIGNEE_ IS NULL
		*		  AND I.TYPE_ = 'candidate'
		*		  AND I.GROUP_ID_ ='managerG';
		*		List<Task> tasks = taskService.createTaskQuery()
		*				.processDefinitionKey("vacation")
		*				.taskCandidateGroupIn(groupNames)
		*/				.list();
		//根据代理人或候选人获取待审批流程列表
	//		List<Task> assignedTasks = taskService.createTaskQuery()
	//				.processDefinitionKey("vacation")
	//				.taskCandidateOrAssigned("节点代理人或候选人ID")
	//				.list();


		//根据流程实例ID查询申请表单数据
		List<String> processInstanceIds = tasks.stream()
				.map(task -> task.getProcessInstanceId())
				.collect(Collectors.toList());
		System.out.println(processInstanceIds);
	}

(4)审批yesOrNo
	@Test
	public void yesOrNo(){
		//查询当前审批节点
		Task vacationAudit = taskService.createTaskQuery()
				.taskId("12504").singleResult();
		//前端接受的审批结果(同意,不同意)
		Integer auditResult = 1;
		if (auditResult == 1) {//审批通过
			//设置流程参数:审批ID
			Map<String, Object> args = new HashMap<>();
			args.put("auditId", "4312");

			//设置审批任务的执行人
			taskService.claim(vacationAudit.getId(), "1");
			//完成审批任务
			taskService.complete(vacationAudit.getId(), args);
		} else {
			//审批不通过,结束流程
			runtimeService.deleteProcessInstance(vacationAudit.getProcessInstanceId(), "4312");
		}
	}
ACT_RU_TASK更新下一个节点

特殊需求,为默认表添加前缀如OYDGHR.

1.需要定位到maven仓库org\activiti\activiti-engine\5.22.0
重写db下的sql,打jar替换原有的
2.在进行crud时操作的为db下的mapping,查看xml可知他支持添加前缀,设置processEngineConfiguration.setDatabaseTablePrefix("OYDGHR.")即可;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值