package process.service;
|
|
import java.io.IOException;
|
import java.io.InputStream;
|
import java.io.OutputStream;
|
import java.util.List;
|
|
import javax.servlet.http.HttpServletRequest;
|
|
import org.activiti.bpmn.model.BpmnModel;
|
import org.activiti.editor.language.json.converter.BpmnJsonConverter;
|
import org.activiti.engine.ProcessEngineConfiguration;
|
import org.activiti.engine.TaskService;
|
import org.activiti.engine.repository.Deployment;
|
import org.activiti.engine.repository.Model;
|
import org.activiti.engine.repository.ProcessDefinition;
|
import org.activiti.engine.runtime.Execution;
|
import org.activiti.engine.runtime.ProcessInstance;
|
import org.activiti.engine.runtime.ProcessInstanceQuery;
|
import org.activiti.engine.task.Task;
|
import org.activiti.image.ProcessDiagramGenerator;
|
|
import com.fasterxml.jackson.databind.JsonNode;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
import process.EngineLoader;
|
import process.service.writer.ProcessInstanceWriter;
|
import foundation.callable.Callable;
|
|
|
public class RuntimeService extends Service {
|
|
private org.activiti.engine.RuntimeService service;
|
private org.activiti.engine.RepositoryService repositoryService;
|
private HttpServletRequest request;
|
private TaskService taskService;
|
|
public RuntimeService(Callable context) throws Exception {
|
super(context);
|
request = context.getRequest();
|
service = processEngine.getRuntimeService();
|
repositoryService = processEngine.getRepositoryService();
|
taskService = processEngine.getTaskService();
|
|
}
|
|
@Override
|
public void call(String operator) throws Exception {
|
if ("getList".equalsIgnoreCase(operator)) {
|
getList();
|
}
|
else if ("startProcess".equalsIgnoreCase(operator)) {
|
startProcess();
|
}
|
else if ("suspendProcess".equalsIgnoreCase(operator)) {
|
suspendProcess();
|
}
|
else if ("activateProcess".equalsIgnoreCase(operator)) {
|
activateProcess();
|
}
|
else if ("getDiagram".equalsIgnoreCase(operator)) {
|
getDiagram();
|
}
|
}
|
|
private void getList() {
|
ProcessInstanceQuery query = service.createProcessInstanceQuery();
|
List<ProcessInstance> instanceList = query.list();
|
resultPool.addValue(null, instanceList, new ProcessInstanceWriter());
|
}
|
|
private void startProcess() {
|
String processId = getProcessId();
|
ProcessInstance process = service.startProcessInstanceById(processId);
|
}
|
|
private void suspendProcess() {
|
String processId = getProcessId();
|
service.suspendProcessInstanceById(processId);
|
}
|
|
private void activateProcess() {
|
String processId = getProcessId();
|
service.activateProcessInstanceById(processId);
|
}
|
|
private void getDiagram() throws IOException {
|
String taskId = request.getParameter("taskId");
|
String executionId = request.getParameter("executionId");
|
// Execution singleResult = service.createExecutionQuery().executionId(executionId).singleResult();
|
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
|
ProcessDefinition singleResult = repositoryService.createProcessDefinitionQuery().processDefinitionId(task.getProcessDefinitionId()).singleResult();
|
Model model = repositoryService.createModelQuery().deploymentId(singleResult.getDeploymentId()).singleResult();
|
JsonNode editorNode = new ObjectMapper().readTree(repositoryService.getModelEditorSource(modelId));
|
BpmnJsonConverter jsonConverter = new BpmnJsonConverter();
|
BpmnModel bpmnModel = jsonConverter.convertToBpmnModel(editorNode);
|
// repositoryService.createModelQuery().deploymentId()
|
// ProcessInstance processInstance = service.createProcessInstanceQuery().processInstanceId(executionId).singleResult();
|
// ProcessDefinition processDefination = repositoryService.createProcessDefinitionQuery().processDefinitionKey(processInstance.getProcessDefinitionKey()).latestVersion().singleResult();
|
//
|
// if (processDefination == null) {
|
// error("execution not exists: " + executionId);
|
// return;
|
// }
|
List<String> activeActivityIds = service.getActiveActivityIds(executionId);
|
ProcessEngineConfiguration engineConfiguration = EngineLoader.engineConfiguration;
|
// BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefination.getId());
|
|
ProcessDiagramGenerator diagramGenerator = engineConfiguration.getProcessDiagramGenerator();
|
InputStream resource = diagramGenerator.generateDiagram(bpmnModel, "png",activeActivityIds,activeActivityIds, "宋体","宋体" ,null, 0);
|
try {
|
response.setHeader("Content-Type", "image/png");
|
OutputStream outputStream = response.getOutputStream();
|
byte[] b = new byte[1024];
|
int len;
|
while ((len = resource.read(b, 0, 1024)) != -1) {
|
outputStream.write(b, 0, len);
|
}
|
}
|
finally {
|
resource.close();
|
}
|
}
|
|
private ProcessInstance getProcessInstance(String id) {
|
ProcessInstanceQuery query = service.createProcessInstanceQuery();
|
ProcessInstance processInstance = query.processInstanceId(id).singleResult();
|
return processInstance;
|
}
|
|
}
|