pom配置:
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter</artifactId>
<version>7.0.0.Beta1</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-image-generator</artifactId>
<version>7.1.0.M6</version>
</dependency>
工具类:
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import org.activiti.bpmn.model.BpmnModel;
import org.activiti.bpmn.model.ExclusiveGateway;
import org.activiti.bpmn.model.FlowElement;
import org.activiti.bpmn.model.SequenceFlow;
import org.activiti.bpmn.model.UserTask;
import org.activiti.engine.HistoryService;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.history.HistoricTaskInstance;
import org.activiti.engine.history.HistoricTaskInstanceQuery;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
/**
* @功能描述: 流程业务处理
*/
@Service
public class ActService {
public static final Integer PASS_VAL = 1;
public static final Integer REJECT_VAL = 0;
public static final String CONDITION = "pass";
@Autowired
private RepositoryService repositoryService;
@Autowired
private RuntimeService runtimeService;
@Autowired
private TaskService taskService;
@Autowired
private HistoryService historyService;
/**
* @apiNote 功能描述 部署流程
* @param file
* -流程文件
* @param name
* - 流程名称
* @return 返回流程部署ID和定义ID
* @throws Exception
*/
public BizActProcess deploy(MultipartFile file, String name) throws Exception {
BizActProcess actProcess = new BizActProcess();
Deployment deploy = repositoryService.createDeployment()
.addBytes(UUID.randomUUID().toString() + ".bpmn", file.getBytes()).name(name).deploy();
actProcess.setDeploymentid(deploy.getId());
ProcessDefinition definition =
repositoryService.createProcessDefinitionQuery().deploymentId(deploy.getId()).singleResult();
actProcess.setDefid(definition.getId());
return actProcess;
}
/**
* @apiNote 功能描述 字符串形式部署流程
* @param bpmninfo
* @param name
* @return
* @throws Exception
*/
public BizActProcess deployByBpmnInfo(String bpmninfo, String name) throws Exception {
BizActProcess actProcess = new BizActProcess();
Deployment deploy = repositoryService.createDeployment()
.addBytes(UUID.randomUUID().toString() + ".bpmn", bpmninfo.getBytes()).name(name).deploy();
actProcess.setDeploymentid(deploy.getId());
ProcessDefinition definition =
repositoryService.createProcessDefinitionQuery().deploymentId(deploy.getId()).singleResult();
actProcess.setDefid(definition.getId());
return actProcess;
}
/**
* @apiNote 功能描述 启动流程实例
* @param definitionId
* -流程定义ID
* @param businessKey
* -业务表ID
* @param variables
* -流程变量
* @return 流程实例ID
*/
public String startProcessInstance(String definitionId, String businessKey, Map<String, Object> variables) {
ProcessInstance processInstance = runtimeService.startProcessInstanceById(definitionId, businessKey, variables);
return processInstance.getId();
}
/**
* @apiNote 功能描述 当前用户审批通过
* @param actid
* -流程实例ID
* @param comment
* -批注
*/
public void pass(String actid, String comment) {
Task task = taskService.createTaskQuery().processInstanceId(actid)
.taskAssignee(UserUtils.getUserId().toString()).singleResult();
if (task != null) {
if (StringUtils.isNotEmpty(comment)) {
taskService.addComment(task.getId(), actid, comment);
}
taskService.setVariable(task.getId(), ActService.CONDITION, ActService.PASS_VAL);
taskService.complete(task.getId());
} else {
throw new BizException("当前没有任务可操作");
}
}
/**
* @apiNote 功能描述 当前用户审批驳回
* @param actid
* -流程实例ID
* @param comment
* -流程批注
*/
public void reject(String actid, String comment) {
Task task = taskService.createTaskQuery().processInstanceId(actid)
.taskAssignee(UserUtils.getUserId().toString()).singleResult();
if (task != null) {
if (StringUtils.isNotEmpty(comment)) {
taskService.addComment(task.getId(), actid, comment);
}
taskService.setVariable(task.getId(), ActService.CONDITION, ActService.REJECT_VAL);
taskService.complete(task.getId());
} else {
throw new BizException("当前没有任务可操作");
}
}
/**
* 功能描述 流程是否已完成
*/
public boolean isFinish(String actid) {
ProcessInstance processInstance =
runtimeService.createProcessInstanceQuery().processInstanceId(actid).singleResult();
if (processInstance == null) {
return true;
} else {
return false;
}
}
public List<Task> getActList(Long userId) {
return taskService.createTaskQuery().taskAssignee(userId.toString()).list();
}
public void getHisList(Long userId, String deploymentid) {
HistoricTaskInstanceQuery instanceQuery =
historyService.createHistoricTaskInstanceQuery().taskAssignee(userId.toString());
if (StringUtils.isNotEmpty(deploymentid)) {
instanceQuery = instanceQuery.deploymentId(deploymentid);
}
List<HistoricTaskInstance> list = instanceQuery.list();
for (HistoricTaskInstance historicTaskInstance : list) {
System.out.println("ProcessInstanceId : " + historicTaskInstance.getProcessInstanceId());
}
}
public Long getActCount(Long userId) {
return taskService.createTaskQuery().taskAssignee(userId.toString()).count();
}
// 获取节点信息
public void getFlowElementList(String definitionId) {
BpmnModel model = repositoryService.getBpmnModel(definitionId);
if (model != null) {
Collection<FlowElement> flowElements = model.getMainProcess().getFlowElements();
for (FlowElement e : flowElements) {
if (e instanceof ExclusiveGateway) {
List<SequenceFlow> incomingFlows = ((ExclusiveGateway)e).getIncomingFlows();
List<SequenceFlow> outgoingFlows = ((ExclusiveGateway)e).getOutgoingFlows();
for (SequenceFlow incomingFlow : incomingFlows) {
FlowElement sourceFlowElement = incomingFlow.getSourceFlowElement();
if (sourceFlowElement instanceof UserTask) {
UserTask ut = (UserTask)sourceFlowElement;
String assignee = ut.getAssignee();
if (StringUtils.isNotEmpty(assignee)) {
assignee = assignee.replaceAll("\\$|\\{|\\}", "");
}
System.out.println(assignee);
System.out.println(sourceFlowElement.getClass() + " id: " + sourceFlowElement.getId()
+ " name: " + sourceFlowElement.getName());
}
}
for (SequenceFlow outgoingFlow : outgoingFlows) {
// FlowElement targetFlowElement = outgoingFlow.getTargetFlowElement();
System.out.println(outgoingFlow + " outgoingFlow name: " + outgoingFlow.getName());
}
}
// StartEvent UserTask EndEvent SequenceFlow ExclusiveGateway
// System.out.println(e.getClass().toString() + " flowelement id: " + e.getId() + " name:" +
// e.getName());
}
}
}
}
未经允许不得转载:
红吉他 »
JAVA »
activiti 流程处理