
查看流程图比较简单,获取流程定义,展示即可。
重点是实现当前节点标记:流程需要判断:是否已经结束
结束:获取结束节点
未结束:获取当前活动节点
测试代码如下:
@Autowired
ProcessEngineConfiguration processEngineConfiguration;
@Autowired
private ProcessEngine processEngine;
@Autowired
private RepositoryService repositoryService;
@Autowired
private RuntimeService runtimeService;
@Autowired
private HistoryService historyService;
@RequestMapping(value = "/wjwtest")
@ResponseBody
public void testProcess(@RequestParam(name = "proInsId") String
proInsId, @RequestParam(name = "businessKey") String businessKey,HttpServletResponse response) {
try {
//启动流程
// RepositoryService repositoryService = SpringContextUtil.getApplicationContext().getBean(RepositoryService.class);
// RuntimeService runtimeService = SpringContextUtil.getApplicationContext().getBean(RuntimeService.class);
// Deployment deployment = repositoryService.createDeployment()
// .name("会签测试")
// .addClasspathResource("activiti/process.bpmn20.xml").deploy();
// System.out.println("deploy success,deploymentId:" + deployment.getId());
// //设置参数,并且启动
// Map map = new HashMap<>();
// List assignList = new ArrayList<>();
// assignList.add("终审01");
// assignList.add("终审02");
// assignList.add("终审03");
// map.put("assignList",assignList);
// ProcessInstance instance = runtimeService.startProcessInstanceByKey("process","process_2",map);
//完成节点
// Task currentTask = taskService.createTaskQuery().processInstanceId("2215005").singleResult();
// taskService.setAssignee(currentTask.getId(), "终审03");
// taskService.complete(currentTask.getId(), new HashMap<>());
response.setContentType("image/png");
InputStream imageStream;
String processDefinitionId;
ProcessDiagramGenerator diagramGenerator = processEngineConfiguration.getProcessDiagramGenerator();
List currentActivities = new ArrayList();
if (proInsId.equals("0")) {//如果只是展示流程图,这个判断就满足了
ProcessDefinitionQuery pdq = repositoryService.createProcessDefinitionQuery();
ProcessDefinition pd = pdq.processDefinitionKey(businessKey).latestVersion().singleResult();
processDefinitionId = pd.getId();
}else {//标记流程进度代码
ProcessInstance processInstance_ = runtimeService.createProcessInstanceQuery().processInstanceId(proInsId).singleResult();
//获取历史流程实例
HistoricProcessInstance processInstance;
if (processInstance_ != null) {//流程没有结束
processInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstance_.getId()).singleResult();
currentActivities = runtimeService.getActiveActivityIds(processInstance_.getId());
} else {//流程结束,则返回终审节点
processInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(proInsId).singleResult();
currentActivities.add(historyService.createHistoricActivityInstanceQuery().executionId(processInstance.getId()).activityType("endEvent").singleResult().getActivityId());
}
processEngineConfiguration = processEngine.getProcessEngineConfiguration();
processEngineConfiguration.setActivityFontName("WenQuanYi Micro Hei");
processEngineConfiguration.setLabelFontName("WenQuanYi Micro Hei");
processEngineConfiguration.setAnnotationFontName("WenQuanYi Micro Hei");
Context.setProcessEngineConfiguration((ProcessEngineConfigurationImpl) processEngineConfiguration);
processDefinitionId = processInstance.getProcessDefinitionId();
//中文显示的是口口口,设置字体就好了
}
//获取流程图
BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);
imageStream = diagramGenerator.generateDiagram(bpmnModel, "png", currentActivities, new ArrayList(), "WenQuanYi Micro Hei", "WenQuanYi Micro Hei", "WenQuanYi Micro Hei", null, 1.0D);
// 输出资源内容到相应对象
byte[] b = new byte[2048];
int len;
while ((len = imageStream.read(b)) > 0) {
response.getOutputStream().write(b, 0, len);
}
}catch (Exception e){
LOGGER.error("error",e);
}
}
以下为测试结果:
测试流程没有居中。可以在exploer里面做调整。后续会出用activiti-explore画流程图的博客。
其中我们遇到的一个问题有,流程指向线只有用explore画的才是直的,用idea画的就会弯弯曲曲。
其中功能开发过程中,有遇到字体乱码问题,正常的配置文件activiti.cfg.xml配置字体后
还需要注意服务器需要安装字体。否则上线后有可能也会乱码可能。
如果觉得有用,记得给作者一个赞表示鼓励哦!
有问题可以随时探讨~
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)