データベース
- 1. act_ge_一般データテーブル、geは一般の略語
- 2、act_hi_履歴データテーブル、hiはHistoryの省略形であり、HistoryServiceインターフェイスに対応しています。
- 3. act_id_ IDデータテーブル、idはIdentityServiceインターフェイスに対応するIDの省略形です。
- 4、act_re_プロセスストレージテーブル、reはリポジトリの省略形で、RepositoryServiceインターフェイスに対応し、プロセスのデプロイメントやプロセス定義などの静的データを格納します。
- 5、act_ru_ランタイムデータテーブル、ruはランタイムの省略形で、RuntimeServiceインターフェイスとTaskServiceインターフェイスに対応し、プロセスインスタンスやユーザータスクなどの動的データを格納します。
インターフェース
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
RuntimeService runtimeService = processEngine.getRuntimeService();
RepositoryService repositoryService = processEngine.getRepositoryService();
TaskService taskService = processEngine.getTaskService();
ManagementService managementService = processEngine.getManagementService();
IdentityService identityService = processEngine.getIdentityService();
HistoryService historyService = processEngine.getHistoryService();
FormService formService = processEngine.getFormService();
- RepositoryService:一連の管理プロセスデプロイメントおよびプロセス定義APIを提供します。
- RuntimeService:プロセスの実行中にプロセスインスタンスを管理および制御します。
- TaskService:タスクリマインダー、タスク完了、タスク作成などのプロセスタスクを管理します。
- IdentityService:プロセスロールデータを管理するためのAPIを提供します。これらのロールデータには、ユーザーグループ、ユーザー、およびそれらの間の関係が含まれます。
- ManagementService:プロセスエンジンの管理とメンテナンスのためのサービスを提供します。
- HistoryService:プロセスの履歴データを操作します。これには、これらの履歴データのクエリと削除が含まれます。
- FormService:フォームサービス。
Webプロセス設計ツール
1. Activitiが提供するプロセスデザイナーアプリケーションactiviti-app.warをTomcat webappsディレクトリにデプロイします。
2.新しいMySqlデータベースを作成します。MySqlデータベースを使用するように、activiti-app \ WEB-INF \ classes \ META-INF \ activiti-appディレクトリのdb.properties構成ファイルを変更します(デフォルトではH2メモリデータベースが使用され、作成したモデルは再起動後に失われます)
3.ブラウザを開いてhttp:// localhost:8080 / activiti-explorerと入力し、ユーザーkermitとパスワードkermitを使用してログインします。
休暇プロセスを設計する
プロセスの作成と展開
プロセス情報は次のとおりです:
アプリケーションを開始します(それぞれ1日と4日です)
システムユーザーをactivitiユーザーに変換します
User user=identityService.newUser(*sysUser.getLoginName()*);
user.setLastName(*sysUser.getUserName()*);
user.setFirstName*(sysUser.getUserName()*);
user.setEmail(*sysUser.getEmail()*);
identityService.saveUser(user);
グループを作成します(休暇プロセスのグループに対応)
Group group = identityService.newGroup(*idGroup.getId()*);
group.setName(*idGroup.getName()*);
group.setType(*idGroup.getType()*);
identityService.saveGroup(group);
ユーザーグループバインドの
表示タスク
//查出当前登录用户所在的用户组
List<Group> groups = identityService.createGroupQuery()
.groupMember(String.valueOf(getLoginName())).list();
List<String> groupNames = groups.stream()
.map(group -> group.getId()).collect(Collectors.toList());
if (groups == null){
return null;
}
//查询用户组的待审批请假流程列表
List<Task> tasks = taskService.createTaskQuery()
//指定任务
//.processDefinitionKey(ActConstant.ProcessInstance_QingJia)
.taskCandidateGroupIn(groupNames)
.listPage(pageDomain.getPageNum() - 1, pageDomain.getPageSize());
//获取下个节点 信息
ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(newOaTask.getProcessInstanceId()).singleResult();
if(pi==null){
log.info("insertLeaveApply 流程 {} 结束" ,id);
}else{
Task nextTask = taskService.createTaskQuery().processInstanceId(pi.getId()).singleResult();
log.info("insertLeaveApply 流程 {} 进行中 ,下个任务 {}",id,nextTask.getId());
}
(マネージャーの承認)-マネージャーの役割のユーザーログイン[このタスクIDは、最初に承認されたときに、上記とは異なります。無視してください]
//查询当前审批节点
Task task = taskService.createTaskQuery().taskId(id).singleResult();
if (ActConstant.ProcessResult_PASS.equals(auditResult)){
//通过
//设置流程参数
Map<String, Object> args = new HashMap<>();
args.put("auditId", task.getId());
//设置审批任务的执行人
taskService.claim(task.getId(), getLoginName());
//完成审批任务
taskService.complete(task.getId(), args);
}else{
// 不通过
runtimeService.deleteProcessInstance(task.getProcessInstanceId(), task.getId());
}
その後、プロセスのフローを確認できます...
(ディレクターのレビュー)-ディレクターの役割のユーザーログイン
プロセスはhr
hrログインしてタスクを表示します
レビューa
統合スプリングブーツ
package com.platform.config;
import org.activiti.engine.*;
import org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl;
import org.activiti.engine.impl.history.HistoryLevel;
import org.activiti.spring.ProcessEngineFactoryBean;
import org.activiti.spring.SpringProcessEngineConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.PlatformTransactionManager;
import javax.sql.DataSource;
/**
* 工作流相关配置 @author liuli
* 7大接口
* RepositoryService:提供一系列管理流程部署和流程定义的API。
* RuntimeService:在流程运行时对流程实例进行管理与控制。
* TaskService:对流程任务进行管理,例如任务提醒、任务完成和创建任务等。
* IdentityService:提供对流程角色数据进行管理的API,这些角色数据包括用户组、用户及它们之间的关系。
* ManagementService:提供对流程引擎进行管理和维护的服务。
* HistoryService:对流程的历史数据进行操作,包括查询、删除这些历史数据。
* FormService:表单服务。
*
* 1、act_ge_ 通用数据表,ge是general的缩写
* 2、act_hi_ 历史数据表,hi是history的缩写,对应HistoryService接口
* 3、act_id_ 身份数据表,id是identity的缩写,对应IdentityService接口
* 4、act_re_ 流程存储表,re是repository的缩写,对应RepositoryService接口,存储流程部署和流程定义等静态数据
* 5、act_ru_ 运行时数据表,ru是runtime的缩写,对应RuntimeService接口和TaskService接口,存储流程实例和用户任务等动态数据
*/
@Configuration
public class ActivitiConfig
{
@Bean
public ProcessEngineConfiguration processEngineConfiguration(DataSource dataSource, PlatformTransactionManager transactionManager)
{
SpringProcessEngineConfiguration processEngineConfiguration = new SpringProcessEngineConfiguration();
processEngineConfiguration.setDataSource(dataSource);
/**
* false:false为默认值,设置为该值后,Activiti在启动时,会对比数据库表中保存的版本,如果没有表或者版本不匹配时,将在启动时抛出异常。
* true:设置为该值后,Activiti会对数据库中所有的表进行更新,如果表不存在,则Activiti会自动创建。
* create-drop:Activiti启动时,会执行数据库表的创建操作,在Activiti关闭时,执行数据库表的删除操作。
* drop-create:Activiti启动时,执行数据库表的删除操作在Activiti关闭时,会执行数据库表的创建操作。
*/
processEngineConfiguration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
processEngineConfiguration.setDatabaseType("mysql");
processEngineConfiguration.setTransactionManager(transactionManager);
// 流程图字体
processEngineConfiguration.setActivityFontName("宋体");
processEngineConfiguration.setAnnotationFontName("宋体");
processEngineConfiguration.setLabelFontName("宋体");
/**
* 保存历史数据级别设置为full最高级别,便于历史数据的追溯
* none:不保存任何的历史数据,因此,在流程执行过程中,这是最高效的。
* activity:级别高于none,保存流程实例与流程行为,其他数据不保存。
* audit:除activity级别会保存的数据外,还会保存全部的流程任务及其属性。audit为history的默认值。
* full:保存历史数据的最高级别,除了会保存audit级别的数据外,还会保存其他全部流程相关的细节数据,包括一些流程参数等。
*/
//使用系统业务自定义的
processEngineConfiguration.setHistoryLevel(HistoryLevel.NONE);
// 用户验证表改成使用视图
processEngineConfiguration.setDbIdentityUsed(false);
return processEngineConfiguration;
}
@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();
}
}
時間と空間の問題この値は大まかなアイデアと主要なビジネスコードを提供します。理解できない場合は、私に連絡して話し合ってください
参考資料:
http : //www.mossle.com/docs/activiti/index.html#activitiExplorer
https://juejin.im/post/5a4064365188252b145b4560
https://www.jianshu.com/p/701056e672a4