activiti6 获取流程图

activiti6 高亮跟踪流程图

废话不多说直接上代码

望大佬别喷 谢谢!!!!

Controller
@RequestMapping(“/displayFlowCurrPic”)
@ApiOperation(value = “显示流程图”, httpMethod = “GET”, notes = “显示流程图”)
@ResponseBody
public String displayFlowCurrPicnew(HttpServletRequest request, HttpServletResponse response,String deploymentId) {

	return jbpmProcessinstanceService.displayFlowCurr(request,response,deploymentId);
}

Service
/** 显示流程图
* @param
* @author
*/
public String displayFlowCurr(HttpServletRequest request, HttpServletResponse response,String deploymentId){
activitiInstanceService.getProcessImage(request,response,deploymentId);
return null;
}
之所以我没直接写到这个service中因为后续好降或升activiti的版本

直接写到底层ActivitiInstanceService
/** 显示流程图
* @param request
*/
public String getProcessImage(HttpServletRequest request, HttpServletResponse response,String deploymentId){
BufferedImage img = new BufferedImage(300, 150, BufferedImage.TYPE_INT_RGB);
//对byte类型数据进行写入的类
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
//String deploymentId=request.getParameter(“deploymentId”);
String imgBase64Str = “”;
try {
ProcessDefinition processDefinition=ProcessEngines.getDefaultProcessEngine()
.getRepositoryService().createProcessDefinitionQuery()
.deploymentId(deploymentId)
.singleResult();
List activeTasks= ProcessEngines.getDefaultProcessEngine().getTaskService().createTaskQuery().processDefinitionId(processDefinition.getId()).list();
// 已执行的线集合
List executedActivityIdList = new ArrayList();
List highLines = new ArrayList();
List highNodes = new ArrayList();

		BpmnModel bpmnModel = ProcessEngines.getDefaultProcessEngine().getRepositoryService().getBpmnModel(processDefinition.getId());
		for(Task task:activeTasks){
			executedActivityIdList.add(task.getTaskDefinitionKey());
			highLines.addAll(getHighLines(bpmnModel,task.getTaskDefinitionKey()));
			highNodes.addAll(getHighNodes(bpmnModel,task.getTaskDefinitionKey()));
		}
		// 获取流程图图像字符流
		InputStream imageStream = new DefaultProcessDiagramGenerator().generateDiagram(bpmnModel, "png",
				highNodes, highLines, "宋体", "宋体", "宋体", null, 2.0);
		// 输出资源内容到相应对象
		byte[] b = new byte[8092];
		int len;
		while ((len = imageStream.read(b, 0, 8092)) != -1) {
			response.getOutputStream().write(b, 0, len);
		}
		imgBase64Str = "data:image/png;base64," + Base64.getEncoder().encodeToString(Objects.requireNonNull(outputStream.toByteArray()));
		imageStream.close();
	} catch (Exception e) {
		e.printStackTrace();
	}
	return imgBase64Str;
}
/**
 * 获取高亮的节点
 * @param bpmnModel
 * @param key
 * @return
 */
private Set<String> getHighNodes(BpmnModel bpmnModel, String key) {
	FlowNode fl = (FlowNode) bpmnModel.getFlowElement(key);
	List<SequenceFlow> sequenceFlows = fl.getIncomingFlows();
	Set<String> highNodes = new HashSet<>();
	highNodes.add(key);
	for (SequenceFlow sf : sequenceFlows) {
		if (StringUtils.isNotBlank(sf.getSourceRef())) {
			highNodes.addAll(getHighNodes(bpmnModel, sf.getSourceRef()));
		}
		return highNodes;
	}
	return highNodes;
}
/**
 * 获取高亮的线
 * @param bpmnModel
 * @param key
 * @return
 */
private Set<String> getHighLines(BpmnModel bpmnModel, String key) {
	FlowNode fl = (FlowNode) bpmnModel.getFlowElement(key);
	List<SequenceFlow> sequenceFlows = fl.getIncomingFlows();
	Set<String> getHighLines = new HashSet<>();
	getHighLines.add(key);
	for (SequenceFlow sf : sequenceFlows) {
		if (StringUtils.isNotBlank(sf.getSourceRef())) {
			getHighLines.addAll(getHighNodes(bpmnModel, sf.getSourceRef()));
		}
		return getHighLines;
	}
	return getHighLines;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高空二踢脚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值