You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
186 lines
7.8 KiB
186 lines
7.8 KiB
package com.example.demo.controller;
|
|
|
|
import com.fasterxml.jackson.databind.JsonNode;
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
import io.swagger.annotations.Api;
|
|
import io.swagger.annotations.ApiOperation;
|
|
import org.activiti.bpmn.converter.BpmnXMLConverter;
|
|
import org.activiti.bpmn.converter.CallActivityXMLConverter;
|
|
import org.activiti.bpmn.converter.UserTaskXMLConverter;
|
|
import org.activiti.bpmn.model.*;
|
|
import org.activiti.bpmn.model.Process;
|
|
import org.activiti.editor.language.json.converter.BpmnJsonConverter;
|
|
import org.activiti.engine.ProcessEngine;
|
|
import org.activiti.engine.RepositoryService;
|
|
import org.activiti.engine.RuntimeService;
|
|
import org.activiti.engine.TaskService;
|
|
import org.activiti.engine.repository.Deployment;
|
|
import org.activiti.engine.repository.DeploymentBuilder;
|
|
import org.activiti.engine.repository.Model;
|
|
import org.activiti.engine.runtime.ProcessInstance;
|
|
import org.activiti.engine.task.Task;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.core.io.ClassPathResource;
|
|
import org.springframework.web.bind.annotation.GetMapping;
|
|
import org.springframework.web.bind.annotation.RequestMapping;
|
|
import org.springframework.web.bind.annotation.RestController;
|
|
|
|
import javax.xml.stream.XMLInputFactory;
|
|
import javax.xml.stream.XMLStreamReader;
|
|
import java.io.UnsupportedEncodingException;
|
|
import java.util.*;
|
|
import java.util.stream.Collectors;
|
|
|
|
/**
|
|
* @author yanpeng
|
|
* @version 1.0
|
|
* @desc TODO
|
|
* @company 北京中经网软件有限公司
|
|
* @date 2020/10/27 14:34
|
|
*/
|
|
@RestController
|
|
@RequestMapping("workflow")
|
|
@Api(tags = "工作流接口")
|
|
public class WorkFlowController {
|
|
|
|
@Autowired
|
|
private ProcessEngine processEngine;
|
|
|
|
@ApiOperation(value = "保存工作流")
|
|
@GetMapping("model")
|
|
public void model() {
|
|
RepositoryService repositoryService = processEngine.getRepositoryService();
|
|
Model model = repositoryService.newModel();
|
|
model.setName("请假工作流");
|
|
model.setKey("holidayex");
|
|
repositoryService.saveModel(model);
|
|
System.out.println(model.getId());
|
|
}
|
|
|
|
|
|
@ApiOperation(value = "保存xml")
|
|
@GetMapping("modelxml")
|
|
public void modelXml(String modeid) throws UnsupportedEncodingException {
|
|
RepositoryService repositoryService = processEngine.getRepositoryService();
|
|
Model model = repositoryService.getModel(modeid);
|
|
// Deployment deploy = repositoryService.createDeployment().addClasspathResource("bpmn/testex1.bpmn").name("请假申请流程").deploy();
|
|
// 创建转换对象
|
|
BpmnXMLConverter bpmnXMLConverter = new BpmnXMLConverter();
|
|
// XMLStreamReader读取XML资源
|
|
XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance();
|
|
XMLStreamReader xmlStreamReader = null;
|
|
try {
|
|
ClassPathResource resource = new ClassPathResource("bpmn/testex1.xml");
|
|
xmlStreamReader = xmlInputFactory.createXMLStreamReader(resource.getInputStream());
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
BpmnXMLConverter.addConverter(new UserTaskXMLConverter());
|
|
BpmnXMLConverter.addConverter(new CallActivityXMLConverter());
|
|
// 把xml转换成BpmnModel对象
|
|
BpmnModel bpmnModel = bpmnXMLConverter.convertToBpmnModel(xmlStreamReader);
|
|
// 创建转换对象
|
|
BpmnJsonConverter bpmnJsonConverter = new BpmnJsonConverter();
|
|
// 把BpmnModel对象转换成json
|
|
String bpmnXml = bpmnJsonConverter.convertToJson(bpmnModel).toString();
|
|
repositoryService.addModelEditorSource(model.getId(), bpmnXml.getBytes("utf-8"));
|
|
}
|
|
|
|
@Autowired
|
|
private RepositoryService repositoryService;
|
|
|
|
@ApiOperation(value = "发布工作流")
|
|
@GetMapping("deploy")
|
|
public void deploy(String modeid) throws Exception {
|
|
Model modelData = repositoryService.getModel(modeid);
|
|
byte[] bytes = repositoryService.getModelEditorSource(modelData.getId());
|
|
JsonNode modelNode = new ObjectMapper().readTree(bytes);
|
|
BpmnModel model = new BpmnJsonConverter().convertToBpmnModel(modelNode);
|
|
model.getProcesses().get(0).setName(modelData.getName());
|
|
//校验有没有开始结束节点-
|
|
List<EndEvent> endEventList = model.getProcesses().get(0).findFlowElementsOfType(EndEvent.class);
|
|
List<StartEvent> startEventList = model.getProcesses().get(0).findFlowElementsOfType(StartEvent.class);
|
|
List<ExclusiveGateway> gateways = model.getProcesses().get(0).findFlowElementsOfType(ExclusiveGateway.class);
|
|
if (gateways != null) {
|
|
for (ExclusiveGateway gateway : gateways) {
|
|
System.out.println(gateway.getId());
|
|
Collection<FlowElement> flowElements = model.getProcesses().get(0).getFlowElements();
|
|
List<SequenceFlow> collect = model.getProcesses().get(0).findFlowElementsOfType(SequenceFlow.class).stream().filter(x -> {
|
|
flowElements.remove(x);
|
|
return x.getSourceRef().equals(gateway.getId());
|
|
}).collect(Collectors.toList());
|
|
Collections.sort(collect, (x1, x2) -> {
|
|
if (x1.getConditionExpression() == null && x2.getConditionExpression() != null) {
|
|
return 1;
|
|
}
|
|
if (x1.getConditionExpression() != null && x2.getConditionExpression() == null) {
|
|
return -1;
|
|
}
|
|
return 0;
|
|
});
|
|
flowElements.addAll(collect);
|
|
System.out.println(collect);
|
|
}
|
|
}
|
|
if (startEventList.size() == 0) {
|
|
System.out.println("没开始节点");
|
|
}
|
|
if (endEventList.size() == 0) {
|
|
System.out.println("没有结束节点");
|
|
}
|
|
|
|
byte[] bpmnByates = new BpmnXMLConverter().convertToXML(model);
|
|
//发布流程
|
|
String processName = modelData.getName() + ".bpmn20.xml";
|
|
String convertToXML = new String(bpmnByates);
|
|
System.out.println(convertToXML);
|
|
DeploymentBuilder deployment = repositoryService.createDeployment();
|
|
deployment.name(modelData.getName());
|
|
deployment.addString(processName, convertToXML);
|
|
// deployment.key(modelData.getKey());
|
|
deployment.key("holidayex");
|
|
Deployment deploy = deployment.deploy();
|
|
modelData.setDeploymentId(deploy.getId());
|
|
System.out.println(deploy.getId());
|
|
System.out.println(deploy.getKey());
|
|
repositoryService.saveModel(modelData);
|
|
}
|
|
|
|
@ApiOperation(value = "启动工作流")
|
|
@GetMapping("start")
|
|
public void start(Integer num) {
|
|
RuntimeService runtimeService = processEngine.getRuntimeService();
|
|
Map<String,Object> map = new HashMap<>();
|
|
map.put("num",num);
|
|
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("holidayex",map);
|
|
System.out.println(processInstance.getProcessDefinitionId());
|
|
System.out.println(processInstance.getId());
|
|
}
|
|
|
|
@Autowired
|
|
private TaskService taskService;
|
|
|
|
@ApiOperation(value = "查询任务")
|
|
@GetMapping("query")
|
|
public Boolean query() {
|
|
// TaskService taskService = processEngine.getTaskService();
|
|
List<Task> holidayex = taskService.createTaskQuery().processDefinitionKey("holidayex").list();
|
|
holidayex.stream().forEach(x -> {
|
|
System.out.println(x.getProcessDefinitionId());
|
|
System.out.println(x.getId());
|
|
System.out.println(x.getName());
|
|
System.out.println(x.getAssignee());
|
|
});
|
|
return true;
|
|
}
|
|
|
|
|
|
@ApiOperation(value = "完成任务")
|
|
@GetMapping("ok")
|
|
public Boolean ok(String taskid) {
|
|
TaskService taskService = processEngine.getTaskService();
|
|
taskService.complete(taskid);
|
|
return true;
|
|
}
|
|
}
|
|
|