话不多说 直接贴代码我把这边的 文件路径写成了枚举
package cn.stack.activiti.bean.bpmn;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 所有Bpmn存储路径
*
* @author 7
* @date 2022/9/15 14:38
*/
@AllArgsConstructor
@Getter
public enum FileLocation {
/**
* 新增发布仓储流程
*/
WAREHOUSING_LOAD("流程1", "loadWarehousing", "processes/storage/warehousing-load-process.bpmn", "processes/storage/warehousing-load-process.bpmn.png"),
/**
* 退库流程
*/
BACK_OUT_WAREHOUSING("流程2", "backout-warehousing", "processes/storage/warehousing-backOut-process.bpmn", "processes/storage/warehousing-backOut-process.bpmn.png");
/**
* 中文名称
*/
private String name;
/**
* 唯一key
*/
private String key;
/**
* 文件路径
*/
private String bpmnPath;
/**
* 图片路径
*/
private String pngPath;
}
/**
* 创建数据库表 存储
*/
@Test
public void contextLoads() {
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
System.err.println(processEngine);
}
/**
* 单文件部署
*/
@Test
public void deploy() {
//创建引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//得到RepositoryService实例
RepositoryService repositoryService = processEngine.getRepositoryService();
Deployment deployment = repositoryService.createDeployment().disableSchemaValidation()
.addClasspathResource(FileLocation.BACK_OUT_WAREHOUSING.getBpmnPath())
.addClasspathResource(FileLocation.BACK_OUT_WAREHOUSING.getPngPath())
.name(FileLocation.BACK_OUT_WAREHOUSING.getName()).deploy();
System.err.println("部署id" + deployment.getId());
System.err.println("部署name" + deployment.getName());
}
/**
* 压缩包部署审核
*/
@Test
public void zipDeploy() {
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("processes/processes.zip");
//转换成压缩文件
ZipInputStream zipInputStream = new ZipInputStream(inputStream);
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//获取 RepositoryService
RepositoryService repositoryService = processEngine.getRepositoryService();
Deployment deploy = repositoryService.createDeployment().addZipInputStream(zipInputStream).disableSchemaValidation().deploy();
System.err.println("部署id= " + deploy.getId());
System.err.println("部署name= " + deploy.getName());
}
/**
* 启动流程实例
*/
@Test
public void startProcessesInstance() {
//创建processEngines
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//获取运行时 RuntimeService
RuntimeService runtimeService = processEngine.getRuntimeService();
ProcessInstance myProcesses = runtimeService.startProcessInstanceByKey("myProcesses");
System.out.println("流程定义id-" + myProcesses.getProcessDefinitionId());
System.out.println("流程实例id-" + myProcesses.getId());
System.out.println("当前活动Id-" + myProcesses.getActivityId());
}
/**
* 查询该角色下的所有任务
*/
@Test
public void fndPersonalTaskList() {
//角色名称
String assignee = "worker";
//创建processEngines
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//获取taskService
TaskService taskService = processEngine.getTaskService();
//获取当前角色所得任务
List<Task> processesList = taskService.createTaskQuery().processDefinitionKey("myProcesses").taskAssignee(assignee).list();
processesList.stream().forEach(item -> {
System.err.println("流程实例id:" + item.getProcessInstanceId());
System.err.println("任务id:" + item.getId());
System.err.println("任务负责人:" + item.getAssignee());
System.err.println("任务名称:" + item.getName());
});
System.err.println("长度为:{]" + processesList.size());
}
/**
* 完成任务
*/
@Test
public void completTask() {
//获取引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//获取TaskService
TaskService taskService = processEngine.getTaskService();
//查询角色下的任务
List<Task> worker = taskService.createTaskQuery().taskAssignee("worker").list();
worker.stream().forEach(item -> {
//确认任务
taskService.complete(item.getId());
});
}
/**
* 查询流程定义
*/
@Test
public void queryProcessDefinition() {
// 获取引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
RepositoryService repositoryService = processEngine.getRepositoryService();
// 得到ProcessDefinitionQuery 对象
ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery();
// 查询出当前所有的流程定义
// 条件:processDefinitionKey =evection
// orderByProcessDefinitionVersion 按照版本排序
// desc倒叙
// list 返回集合
List<ProcessDefinition> definitionList = processDefinitionQuery.processDefinitionKey("myProcesses")
.orderByProcessDefinitionVersion()
.desc()
.list();
// 输出流程定义信息
for (ProcessDefinition processDefinition : definitionList) {
System.out.println("流程定义 id=" + processDefinition.getId());
System.out.println("流程定义 name=" + processDefinition.getName());
System.out.println("流程定义 key=" + processDefinition.getKey());
System.out.println("流程定义 Version=" + processDefinition.getVersion());
System.out.println("流程部署ID =" + processDefinition.getDeploymentId());
}
}
/**
* 流程删除
*/
@Test
public void delDeploy() {
//流程部署id
String deploymentId = "60005";
//获取引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//获取RepositoryService
RepositoryService repositoryService = processEngine.getRepositoryService();
//删除流程定义,如果该流程定义已有流程实例启动则删除时出错
repositoryService.deleteDeployment(deploymentId);
//true代表级联删除可以理解为暴力删除
// repositoryService.deleteDeployment(deploymentId, true);
}
/**
* 查看历史信息
*/
@Test
public void findHistoryInfo() {
// 获取引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
// 获取HistoryService
HistoryService historyService = processEngine.getHistoryService();
// 获取 actinst表的查询对象
HistoricActivityInstanceQuery instanceQuery = historyService.createHistoricActivityInstanceQuery();
// 查询 actinst表,条件:根据 InstanceId 查询
// instanceQuery.processInstanceId("2501");
// 查询 actinst表,条件:根据 DefinitionId 查询
instanceQuery.processDefinitionId("myProcesses:34:62504");
// 增加排序操作,orderByHistoricActivityInstanceStartTime 根据开始时间排序 asc 升序
instanceQuery.orderByHistoricActivityInstanceStartTime().asc();
// 查询所有内容
List<HistoricActivityInstance> activityInstanceList = instanceQuery.list();
// 输出
for (HistoricActivityInstance hi : activityInstanceList) {
System.err.println(hi.getActivityId());
System.err.println(hi.getActivityName());
System.err.println(hi.getProcessDefinitionId());
System.err.println(hi.getProcessInstanceId());
System.err.println("<==========================>");
}
}
/**
* 下载png以及bpmn文件
*
* @throws Exception
*/
@Test
public void downloadBpmnFile() throws Exception {
//获取引擎
ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
//获取repositoryService
RepositoryService repositoryService = defaultProcessEngine.getRepositoryService();
//通过流程信息获取部署id
ProcessDefinition processDefinitions = repositoryService.createProcessDefinitionQuery().processDefinitionKey("myProcesses").singleResult();
//获取部署id
String deploymentId = processDefinitions.getDeploymentId();
//获取文件名称
String diagramResourceName = processDefinitions.getDiagramResourceName();
//获取png图片
InputStream pngInput = repositoryService.getResourceAsStream(deploymentId, diagramResourceName);
//获取bpmn流
String bpmnName = processDefinitions.getResourceName();
//获取bpmn文件输出流
InputStream bpmnInput = repositoryService.getResourceAsStream(deploymentId, diagramResourceName);
//构造output
File bpmnPath = new File("E:/deploy/deploy.bpmn");
File pngPath = new File("E:/deploy/deploy.png");
FileOutputStream bpmnOutputStream = new FileOutputStream(bpmnPath);
FileOutputStream pngOutputStream = new FileOutputStream(pngPath);
//输入输出流转换
IOUtils.copy(pngInput, pngOutputStream);
IOUtils.copy(bpmnInput, bpmnOutputStream);
//关闭流
bpmnInput.close();
pngInput.close();
bpmnOutputStream.close();
pngOutputStream.close();
}
/**
* 历史记录查询
*/
@Test
public void getRecordInfo() {
//获取引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//获取HistoryService 查询历史信息
HistoryService historyService = processEngine.getHistoryService();
//获取实例信息
HistoricActivityInstanceQuery instanceQuery = historyService.createHistoricActivityInstanceQuery();
//ACT_HI_ACTINST 这个表的这个字段 PROC_INST_ID_ 实例id
instanceQuery.processInstanceId("7506");
//或者是根据流程id查询
// instanceQuery.processDefinitionId("loadWarehousing:3:7505");
//查询所有内容
List<HistoricActivityInstance> list = instanceQuery.list();
//根据时间排序 升序
instanceQuery.orderByHistoricActivityInstanceStartTime().asc();
System.err.println(list);
//查询所有的 历史记录
}
/**
* 基类获取 ProcessEngine
*
* @return
*/
public static ProcessEngine getProcessEngine() {
return ProcessEngines.getDefaultProcessEngine();
}
/**
* 添加一个业务key
*/
@Test
public void addBusinessKey() {
//启动的时候添加一个businesskey 第一个参数 bpmn文件唯一key,第二个是业务key
ProcessInstance instance = getProcessEngine().getRuntimeService().startProcessInstanceByKey("myProcesses", "10086");
//获取业务key
System.err.println("业务key=" + instance.getBusinessKey());
}
/**
* 流程暂停激活
*/
@Test
public void suspendAllInstance() {
//获取RepositoryService
RepositoryService repositoryService = getProcessEngine().getRepositoryService();
//获取所有的流程实例
List<ProcessDefinition> definitionList = repositoryService.createProcessDefinitionQuery().processDefinitionKey("myProcesses").list();
definitionList.stream().forEach(item -> {
//判断是否是挂起状态 挂起就激活 激活状态就挂起
if (item.isSuspended()) {
//挂起就激活 参数一 流程定义的id 参数二 是否要激活 参数三 激活的时间
repositoryService.activateProcessDefinitionById(
item.getId(),
true,
null);
System.err.println("流程定义id已激活" + item.getId());
} else {
//激活状态就挂起 参数一 流程定义的id 参数二 是否要暂停 参数三 暂停的时间
repositoryService.suspendProcessDefinitionById(item.getId(), false, null);
System.err.println("流程定义id挂起" + item.getId());
}
});
}
/**
* 暂停单个流程实例
*/
@Test
public void suspendSingleInstance() {
//获取运行服务
RuntimeService runtimeService = getProcessEngine().getRuntimeService();
//获取流程实例对象
List<ProcessInstance> list = runtimeService.createProcessInstanceQuery().processInstanceId("30015").list();
list.stream().forEach(iot -> {
//判断是否是暂停操作 暂停就激活
if (iot.isSuspended()) {
//挂起就激活 参数一 流程定义的id 参数二 是否要激活 参数三 激活的时间
runtimeService.activateProcessInstanceById(
iot.getId());
System.err.println("单个流程定义id已激活" + iot.getId());
} else {
//激活状态就挂起 参数一 流程定义的id 参数二 是否要暂停 参数三 暂停的时间
runtimeService.suspendProcessInstanceById(iot.getId());
System.err.println("单个流程定义id挂起" + iot.getId());
}
});
}
/**
* uel动态分配负责人 uelProcess ass01 ass2
*/
@Test
public void assigneeuel() {
//部署流程
RepositoryService repositoryService = getProcessEngine().getRepositoryService();
Deployment deploy = repositoryService.createDeployment().name("审核-uel").addClasspathResource("processes/storage/warehousing-process-uel.bpmn").deploy();
System.err.println("流程部署id" + deploy.getId());
System.err.println("流程部署名称" + deploy.getName());
//=============================一下是启动流程
//获取RuntimeService
RuntimeService runtimeService = getProcessEngine().getRuntimeService();
//设置负责人
HashMap<String, Object> map = new HashMap<>();
map.put("ass01", "人事");
map.put("ass02", "财务");
ProcessInstance instance = runtimeService.startProcessInstanceByKey("uelProcess", map);
System.err.println(instance);
}
/***
* 根据业务id查询任务id
* @param
* @return
*/
@Test
public void getTaskId() {
TaskService taskService = ProcessEngines.getDefaultProcessEngine().getTaskService();
Task task = taskService.createTaskQuery().processInstanceBusinessKey("1572142206469427202").singleResult();
System.err.println(task);
}