package com.epoch.platform.workflow.base.rest.diagram.services;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.activiti.engine.ActivitiException;
import org.activiti.engine.ActivitiObjectNotFoundException;
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.HistoricActivityInstance;
import org.activiti.engine.impl.bpmn.behavior.BoundaryEventActivityBehavior;
import org.activiti.engine.impl.bpmn.behavior.CallActivityBehavior;
import org.activiti.engine.impl.bpmn.parser.BpmnParse;
import org.activiti.engine.impl.bpmn.parser.ErrorEventDefinition;
import org.activiti.engine.impl.bpmn.parser.EventSubscriptionDeclaration;
import org.activiti.engine.impl.jobexecutor.TimerDeclarationImpl;
import org.activiti.engine.impl.persistence.entity.ExecutionEntity;
import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity;
import org.activiti.engine.impl.pvm.PvmTransition;
import org.activiti.engine.impl.pvm.delegate.ActivityBehavior;
import org.activiti.engine.impl.pvm.process.ActivityImpl;
import org.activiti.engine.impl.pvm.process.Lane;
import org.activiti.engine.impl.pvm.process.LaneSet;
import org.activiti.engine.impl.pvm.process.ParticipantProcess;
import org.activiti.engine.impl.pvm.process.TransitionImpl;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.runtime.Execution;
import org.activiti.engine.runtime.ProcessInstance;
import org.apache.commons.lang3.StringUtils;
import com.epoch.platform.base.BaseController;
import com.epoch.platform.base.workflow.ActivitiPlugin;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
public class BaseProcessDefinitionDiagramLayoutResource extends BaseController{
private ProcessEngine pEngine = ActivitiPlugin.buildProcessEngine();
private RuntimeService runtimeService = this.pEngine.getRuntimeService();
private RepositoryService repositoryService = this.pEngine.getRepositoryService();
private HistoryService historyService = this.pEngine.getHistoryService();
public ObjectNode getDiagramNode(String processInstanceId, String processDefinitionId) {
List<String> highLightedFlows = Collections.<String> emptyList();
List<String> highLightedActivities = Collections.<String> emptyList();
Map<String, ObjectNode> subProcessInstanceMap = new HashMap<String, ObjectNode>();
ProcessInstance processInstance = null;
if (processInstanceId != null) {
processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
if (processInstance == null) {
throw new ActivitiObjectNotFoundException("Process instance could not be found");
}
processDefinitionId = processInstance.getProcessDefinitionId();
List<ProcessInstance> subProcessInstances = runtimeService.createProcessInstanceQuery().superProcessInstanceId(processInstanceId).list();
for (ProcessInstance subProcessInstance : subProcessInstances) {
String subDefId = subProcessInstance.getProcessDefinitionId();
String superExecutionId = ((ExecutionEntity) subProcessInstance).getSuperExecutionId();
ProcessDefinitionEntity subDef = (ProcessDefinitionEntity) repositoryService.getProcessDefinition(subDefId);
ObjectNode processInstanceJSON = new ObjectMapper().createObjectNode();
processInstanceJSON.put("processInstanceId", subProcessInstance.getId());
processInstanceJSON.put("superExecutionId", superExecutionId);
processInstanceJSON.put("processDefinitionId", subDef.getId());
processInstanceJSON.put("processDefinitionKey", subDef.getKey());
processInstanceJSON.put("processDefinitionName", subDef.getName());
subProcessInstanceMap.put(superExecutionId, processInstanceJSON);
}
}
if (processDefinitionId == null) {
throw new ActivitiObjectNotFoundException("No process definition id provided");
}
ProcessDefinitionEntity processDefinition = (ProcessDefinitionEntity) repositoryService.getProcessDefinition(processDefinitionId);
if (processDefinition == null) {
throw new ActivitiException("Process definition " + processDefinitionId + " could not be found");
}
ObjectNode responseJSON = new ObjectMapper().createObjectNode();
// Process definition
JsonNode pdrJSON = getProcessDefinitionResponse(processDefinition);
if (pdrJSON != null) {
responseJSON.put("processDefinition", pdrJSON);
}
// Highlighted activities
if (processInstance != null) {
ArrayNode activityArray = new ObjectMapper().createArrayNode();
ArrayNode flowsArray = new ObjectMapper().createArrayNode();
highLightedActivities = runtimeService.getActiveActivityIds(processInstanceId);
highLightedFlows = getHighLightedFlows(processInstanceId, processDefinition);
for (String activityName : highLightedActivities) {
activityArray.add(activityName);
}
for (String flow : highLightedFlows)
flowsArray.add(flow);
responseJSON.put("highLightedActivities", activityArray);
responseJSON.put("highLightedFlows", flowsArray);
}
// Pool shape, if process is participant in collaboration
if (processDefinition.getParticipantProcess() != null) {
ParticipantProcess pProc = processDefinition.getParticipantProcess();
ObjectNode participantProcessJSON = new ObjectMapper().createObjectNode();
participantProcessJSON.put("id", pProc.getId());
if (StringUtils.isNotEmpty(pProc.getName())) {
participantProcessJSON.put("name", pProc.getName());
} else {
participantProcessJSON.put("name", "");
}
participantProcessJSON.put("x", pProc.getX());
participantProcessJSON.put("y", pProc.getY());
participantProcessJSON.put("width", pProc.getWidth());
participantProcessJSON.put("height", pProc.getHeight());
responseJSON.put("participantProcess", participantProcessJSON);
}
// Draw lanes
if (processDefinition.getLaneSets() != null && !processDefinition.getLaneSets().isEmpty()) {
ArrayNode laneSetArray = new ObjectMapper().createArrayNode();
for (LaneSet laneSet : processDefinition.getLaneSets()) {
ArrayNode laneArray = new ObjectMapper().createArrayNode();
if (laneSet.getLanes() != null && !laneSet.getLanes().isEmpty()) {
for (Lane lane : laneSet.getLanes()) {
ObjectNode laneJSON = new ObjectMapper().createObjectNode();
laneJSON.put("id", lane.getId());
if (StringUtils.isNotEmpty(lane.getName())) {
laneJSON.put("name", lane.getName());
} else {
laneJSON.put("name", "");
}
laneJSON.put("x", lane.getX());
laneJSON.put("y", lane.getY());
laneJSON.put("width", lane.getWidth());
laneJSON.put("height", lane.getHeight());
List<String> flowNodeIds = lane.getFlowNodeIds();
ArrayNode flowNodeIdsArray = new ObjectMapper().createArrayNode();
for (String flowNodeId : flowNodeIds) {
flowNodeIdsArray.add(flowNodeId);
}
laneJSON.put("flowNodeIds", flowNodeIdsArray);
laneArray.add(laneJSON);
}
}
ObjectNode laneSetJSON = new ObjectMapper().createObjectNode();
laneSetJSON.put("id", laneSet.getId());
if (StringUtils.isNotEmpty(laneSet.getName())) {
laneSetJSON.put("name", laneSet.getName());
} else {
laneSetJSON.put("name", "");
}
laneSetJSON.put("lanes", laneArray);
laneSetArray.add(laneSetJSON);
}
if (laneSetArray.size() > 0)
responseJSON.put("laneSets", laneSetArray);
}
ArrayNode sequenceFlowArray = new Object
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
epoch-erp是基于jfinal的系统,本来想集成后续开发erp相关功能的,但是因为UI的问题,项目处于搁浅中。目前系统已经基本集成的功能包含有,用户管理,角色管理,菜单管理,组织管理,数据字典,日志管理,接口管理(暂时未完成实际应用),流程配置,运行流程管理,消息管理(暂无实际应用),业务模块没有做。后台是基于Jfinal+shiro+缓存框架EhCache或者Redis,数据库使用了durid流和mysql数据库。模板使用了Jfinal自带的模板开发功能。前台框架使用了topjui技术,具体可百度查官网。工作流已经集成进去了activity5,包含代码功能等已经正常集成可用。配置好环境,启用可以tomcat来正常启用,报错无误后即可打开界面。
资源推荐
资源详情
资源评论
收起资源包目录
JAVA用户、角色、权限、菜单、工作流管理系统 (1785个子文件)
CHANGES 3KB
.classpath 1KB
org.eclipse.wst.common.component 668B
org.eclipse.wst.jsdt.ui.superType.container 49B
modern.css 224KB
orange-blue.css 212KB
pink-blue.css 212KB
pink-violet.css 212KB
bootstrap.css 151KB
bootstrap.min.css 122KB
bootstrap.css 118KB
bootstrap.min.css 98KB
topjui.core.min.css 72KB
animate.css 64KB
layui.css 52KB
ueditor.css 45KB
font-awesome.css 39KB
ueditor.min.css 34KB
font-awesome.min.css 30KB
bootstrap-theme.css 26KB
style-common.css 25KB
animate_bak.css 23KB
bootstrap-theme.min.css 23KB
video-js.css 22KB
_all.css 20KB
image.css 19KB
layim.css 17KB
video.css 15KB
attachment.css 15KB
bootstrap-theme.css 15KB
_all.css 14KB
layer.css 14KB
_all.css 14KB
common.css 14KB
bootstrap-theme.min.css 13KB
style.css 13KB
bootstrap-datetimepicker.css 12KB
_all.css 12KB
main.css 12KB
video-js.min.css 11KB
bootstrap-datetimepicker.min.css 11KB
layim.css 10KB
layui.mobile.css 10KB
style-editor.css 10KB
awesome.css 9KB
style.css 8KB
ng-grid-2.0.7.min.css 7KB
laydate.css 7KB
shCoreDefault.css 7KB
topjui.black.css 7KB
metroStyle.css 7KB
toastr.min.css 7KB
topjui.yellow.css 6KB
topjui.purple.css 6KB
topjui.green.css 6KB
topjui.blue.css 6KB
topjui.red.css 6KB
zTreeStyle.css 6KB
topjui.timeaxis.css 6KB
topjui.bluelight.css 6KB
topjui.blacklight.css 5KB
topjui.redlight.css 5KB
topjui.yellowlight.css 5KB
topjui.greenlight.css 5KB
daterangepicker-bs3.css 5KB
topjui.purplelight.css 5KB
scrawl.css 4KB
editor.css 3KB
codemirror.css 3KB
zTreeStyleForApi.css 3KB
charts.css 3KB
background.css 2KB
style.css 2KB
font.css 2KB
demo.css 2KB
yellow.css 2KB
purple.css 2KB
orange.css 2KB
green.css 2KB
aero.css 2KB
blue.css 2KB
grey.css 2KB
pink.css 2KB
jasmine.css 2KB
red.css 2KB
line.css 2KB
emotion.css 2KB
dialogbase.css 2KB
music.css 2KB
all.css 2KB
yellow.css 2KB
orange.css 2KB
purple.css 2KB
yellow.css 2KB
orange.css 2KB
purple.css 2KB
green.css 2KB
green.css 1KB
aero.css 1KB
blue.css 1KB
共 1785 条
- 1
- 2
- 3
- 4
- 5
- 6
- 18
资源评论
蜡筆尛賢
- 粉丝: 21
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功