activiti7的流程图、模板图及⼦流程图展⽰
activiti7的流程图、模板图及⼦流程图展⽰
流程图需展⽰流程完成情况,模板图根据key到最新模板展⽰。⼦流程需从主流程中到CallActiviti的节点,到对应的⼦流程id(已启动)或模板key(未启动),再进⾏对应的流程或模板展⽰。
//根据流程id 展⽰流程图
private void outPutImageByInstanceId(String instanceId,HttpServletResponse response){
if(StringUtils.isEmpty(instanceId)){
(“流程id为空!”);
return;
}
(“查看完整流程图!流程实例ID:{}”, instanceId);
// 获取流程实例(id查询只能查到单独的记录,如果是其他条件,此处需换为list)
HistoricProcessInstance processInstance =
if (processInstance == null) {
<(“流程实例ID:{}没查询到流程实例!”, instanceId);
return;
}
// 根据流程对象获取流程对象模型
BpmnModel bpmnModel = ProcessDefinitionId());
// 构造历史流程查询
HistoricActivityInstanceQuery historyInstanceQuery = ateHistoricActivityInstanceQuery().processInstanceId(instanceId);
// 查询历史节点
List<HistoricActivityInstance> historicActivityInstanceList = derByHistoricActivityInstanceStartTime().asc().list();
if (historicActivityInstanceList == null || historicActivityInstanceList.size() == 0) {
LOG.info("流程实例ID:{}没有历史节点信息!", instanceId);
outPutImg(response, bpmnModel, null, null);
return;
}
// 已执⾏的节点ID集合(将historicActivityInstanceList中元素的activityId字段取出封装到executedActivityIdList)
List<String> executedActivityIdList = historicActivityInstanceList.stream().map(item -> ActivityId()).List());
/
/ 获取流程定义
ProcessDefinitionEntity processDefinition = (ProcessDefinitionEntity) ((RepositoryServiceImpl) repositoryService).getDeployedProcessDefinition(ProcessDefinitionId());
//获取流程线
List<String> flowIds = HighLightedFlows(bpmnModel, processDefinition, historicActivityInstanceList);
//输出图像
outPutImg(response, bpmnModel, flowIds, executedActivityIdList);
}
//展⽰模板图(根据流程定义key展⽰最新的模板图,此处也可以换为根据模板key展⽰最新模板图)
public void showImgTemplate(String processDefinitonKey, HttpServletResponse response) {
if (StringUtils.isEmpty(processDefinitonKey)) return;
//根据key查询最新的流程定义
List list =
if(ListUtils.isEmpty(list)){
<(“流程定义Key:{}没查询到流程定义!”, processDefinitonKey);
return;
}
// 根据流程对象获取流程对象模型
BpmnModel bpmnModel = (0).getId());
//输出图像
outPutImg(response, bpmnModel, null, null);
}
//图像输出(图像均为svg格式,activiti7如何指定图像格式,还待完善)
private void outPutImg(HttpServletResponse response, BpmnModel bpmnModel, List flowIds, List executedActivityIdList) { InputStream imageStream = null;
try {
if(null == flowIds && null ==executedActivityIdList){
imageStream = ateDiagram(bpmnModel,“宋体”, “微软雅⿊”, “⿊体”);
}else{
imageStream = ateDiagram(bpmnModel, executedActivityIdList, flowIds,
“宋体”, “微软雅⿊”, “⿊体”, true, “png”);
}
// 输出资源内容到相应对象
byte[] b = new byte[1024];
int len;
while ((len = ad(b, 0, 1024)) != -1) {
}
response.setContentType(“image/png”);
svg图} catch (Exception e) {
<(“流程图输出异常!”, e);
} finally { // 流关闭
if (null != imageStream) {
try {
imageStream.close();
} catch (IOException e) {
<(“流程图输⼊流关闭异常!”, e);
imageStream = null;
}
}
}
}
//查询流程图节点信息(可根据节点的位置信息,定位图中每个节点位置。添加相应的前端事件,展⽰节点信息。也可以根据其中callActiviti的节点,到⼦流程的流程id或key,⽤于展⽰⼦流程图)
public List getImgNode(String instanceId ) {
String instanceId = InstanceId();
(“查看完整流程图!流程实例ID:{}”, instanceId);
/*
* 获取activiti流程实例
*/
HistoricProcessInstance processInstance =
if (processInstance == null) {
(“流程实例ID:{}没查询到流程实例!”, instanceId);
result.setDetail(“activiti流程实例查询为空”);
return result;
}
// 根据流程对象获取流程对象模型
BpmnModel bpmnModel = ProcessDefinitionId());
List nodeList = getNodeByModel(TemplateId(),inst,null);
return nodeList ;
}
//根据BpmnModel查询补充节点信息
public List getNodeByModel(BpmnModel bpmnModel,String templateId) {
List nodeList = new ArrayList<>();
List<org.del.Process> ps = Processes();
if (ps != null && ps.size() > 0) {
for (Process process : ps) {
Collection elements = FlowElements();
if (elements != null && elements.size() > 0) {
for (FlowElement el : elements) {
try{
if (el instanceof UserTask) {
BpmImageNode bpmNode = new BpmImageNode();
bpmNode.setType(“UserTask”);
UserTask ut = (UserTask) el;
GraphicInfo artifactGraphicInfo = Id());//id为baseElement的id
if (artifactGraphicInfo != null) {
bpmNode.X());
bpmNode.Y());
bpmNode.Width());
bpmNode.Height());
}
//TODO 此处根据⾃⼰的需要完善逻辑
//可补充任务提交信息,任务表单信息等节点信息
nodeList.add(bpmNode);
}else if(el instanceof CallActivity){
CallActivity ut = (CallActivity) el;
String processDefinitonKey = ((CallActivityBehavior)(ut.getBehavior())).getProcessDefinitonKey();
BpmImageNode bpmNode = new BpmImageNode();
bpmNode.setType(“CallActivity”);
List wfInstanceChildList = null;
//TODO WfInstanceChild是⾃⼰系统保存的流程信息,此处根据⾃⼰项⽬需要完善
if(ListUtils.isEmpty(wfInstanceChildList)){
//⼦流程未开始
bpmNode.setTemplateKey(processDefinitonKey);
}else{
}else{
//⼦流程已开始
List instanceIds = new ArrayList<>();
//TODO 此处可根据⾃⼰的项⽬来查询⼦流程的Id
bpmNode.setInstanceIds(instanceIds);
}
GraphicInfo artifactGraphicInfo = Id());//id为baseElement的id if (artifactGraphicInfo != null) {
bpmNode.X());
bpmNode.Y());
bpmNode.Width());
bpmNode.Height());
}
nodeList.add(bpmNode);
}
}catch(Exception e){
<(e.getMessage(),e);
}
}
}
}
}
return nodeList;
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论