新增运行实例流程图查看

This commit is contained in:
wanggeng 2021-09-24 16:14:06 +08:00
parent 299df8aa7e
commit 558b82a033
3 changed files with 76 additions and 1 deletions

View File

@ -47,7 +47,6 @@ public class ActivitiRouteController {
return mv;
}
@ApiOperation(value = "查看流程图", notes = "查看流程图接口")
@ApiImplicitParams({
@ApiImplicitParam(name = "deploymentId", value = "流程部署ID", paramType = "path")
@ -58,4 +57,14 @@ public class ActivitiRouteController {
activitiModelService.getProcessImage(response, deploymentId);
}
@ApiOperation(value = "查看运行流程图", notes = "查看运行流程图接口")
@ApiImplicitParams({
@ApiImplicitParam(name = "processInstanceId", value = "流程实例ID", paramType = "path")
})
@ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)})
@GetMapping("get-runtime-process-image/{processInstanceId}")
public void getRuntimeProcessImage(HttpServletResponse response, @PathVariable("processInstanceId") String processInstanceId) {
activitiModelService.getRuntimeProcessImage(response, processInstanceId);
}
}

View File

@ -31,4 +31,12 @@ public interface IActivitiModelService {
* @param deploymentId 部署ID
*/
void getProcessImage(HttpServletResponse response, String deploymentId);
/**
* 查看运行流程图
*
* @param response
* @param processInstanceId
*/
void getRuntimeProcessImage(HttpServletResponse response, String processInstanceId);
}

View File

@ -10,9 +10,14 @@ import ink.wgink.module.activiti.service.activiti.IActivitiModelService;
import ink.wgink.util.ResourceUtil;
import org.activiti.bpmn.model.BpmnModel;
import org.activiti.editor.constants.ModelDataJsonConstants;
import org.activiti.engine.HistoryService;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.history.HistoricProcessInstance;
import org.activiti.engine.repository.Model;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.image.impl.DefaultProcessDiagramGenerator;
import org.apache.batik.transcoder.TranscoderInput;
import org.apache.batik.transcoder.TranscoderOutput;
@ -24,6 +29,8 @@ import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
/**
@ -41,6 +48,12 @@ public class ActivitiModelServiceImpl extends DefaultBaseService implements IAct
@Autowired
private RepositoryService repositoryService;
@Autowired
private RuntimeService runtimeService;
@Autowired
private HistoryService historyService;
@Autowired
private ProcessEngine processEngine;
@Override
public void saveModel(String modelId, String name, String description, String json_xml, String svg_xml) throws Exception {
@ -129,4 +142,49 @@ public class ActivitiModelServiceImpl extends DefaultBaseService implements IAct
throw new SystemException("流程图生成错误", e);
}
}
@Override
public void getRuntimeProcessImage(HttpServletResponse response, String processInstanceId) {
response.setContentType("image/png");
try (InputStream inputStream = getRuntimeProcessImageInputStream(processInstanceId);
OutputStream outputStream = response.getOutputStream();
) {
byte[] buf = new byte[1024];
for (int size; (size = inputStream.read(buf)) != -1; ) {
outputStream.write(buf, 0, size);
}
outputStream.flush();
} catch (IOException e) {
throw new SystemException("流程图生成错误", e);
}
}
public InputStream getRuntimeProcessImageInputStream(String processInstanceId) {
//获得流程实例
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
String processDefinitionId = StringUtils.EMPTY;
if (processInstance == null) {
//查询已经结束的流程实例
HistoricProcessInstance processInstanceHistory = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
if (processInstanceHistory == null) {
return null;
} else {
processDefinitionId = processInstanceHistory.getProcessDefinitionId();
}
} else {
processDefinitionId = processInstance.getProcessDefinitionId();
}
//使用宋体
String fontName = "宋体";
//获取BPMN模型对象
BpmnModel model = repositoryService.getBpmnModel(processDefinitionId);
//获取流程实例当前的节点需要高亮显示
List<String> currentActs = Collections.EMPTY_LIST;
if (processInstance != null) {
currentActs = runtimeService.getActiveActivityIds(processInstance.getId());
}
return processEngine.getProcessEngineConfiguration().getProcessDiagramGenerator().generateDiagram(model, "png", currentActs, new ArrayList<>(),
fontName, fontName, fontName, null, 1D);
}
}