新增运行实例流程图查看
This commit is contained in:
parent
299df8aa7e
commit
558b82a033
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user