add - 添加新版的 JSON 转 BPMN 功能
This commit is contained in:
parent
706e884025
commit
aff911595a
@ -4,10 +4,11 @@ package cn.axzo.workflow.common.enums;
|
||||
public enum BpmFlowNodeType {
|
||||
|
||||
//0 发起人 1审批 2抄送 3条件 4路由
|
||||
NODE_STARTER("NODE_STARTER", "发起人节点"),
|
||||
NODE_ROUTER("NODE_ROUTER", "路由节点节点"),
|
||||
NODE_CONDITION("NODE_CONDITION", "条件节点"),
|
||||
NODE_TASK("NODE_TASK", "审核节点");
|
||||
NODE_STARTER("NODE_STARTER", "发起人节点"), // ROOT
|
||||
NODE_EXCLUSIVE_GATEWAY("NODE_EXCLUSIVE_GATEWAY", "排它网关"), // CONDITIONS
|
||||
NODE_PARALLEL_GATEWAY("NODE_PARALLEL_GATEWAY", "并行网关"),
|
||||
NODE_CONDITION("NODE_CONDITION", "条件节点"), // CONDITION
|
||||
NODE_TASK("NODE_TASK", "审核节点"); // APPROVAL
|
||||
|
||||
private String type;
|
||||
private String desc;
|
||||
|
||||
@ -158,7 +158,7 @@ public class BpmTransformUtil {
|
||||
public static String create(String fromId, BpmnJsonNode flowNode, Process process, BpmnModel bpmnModel,
|
||||
List<SequenceFlow> sequenceFlows, Map<String, BpmnJsonNode> childNodeMap) throws InvocationTargetException, IllegalAccessException {
|
||||
String nodeType = flowNode.getType().getType();
|
||||
if (BpmFlowNodeType.NODE_ROUTER.isEqual(nodeType)) {
|
||||
if (BpmFlowNodeType.NODE_EXCLUSIVE_GATEWAY.isEqual(nodeType)) {
|
||||
return createExclusiveGatewayBuilder(fromId, flowNode, process, bpmnModel, sequenceFlows, childNodeMap);
|
||||
} else if (BpmFlowNodeType.NODE_TASK.isEqual(nodeType)) {
|
||||
childNodeMap.put(flowNode.getId(), flowNode);
|
||||
@ -273,7 +273,7 @@ public class BpmTransformUtil {
|
||||
if (Objects.nonNull(childNode) && StringUtils.isNotBlank(childNode.getId())) {
|
||||
String parentId = childNode.getParentId();
|
||||
BpmnJsonNode parentChildNode = childNodeMap.get(parentId);
|
||||
if (BpmFlowNodeType.NODE_ROUTER.equals(parentChildNode.getType())) {
|
||||
if (BpmFlowNodeType.NODE_EXCLUSIVE_GATEWAY.equals(parentChildNode.getType())) {
|
||||
String endExId = parentChildNode.getId() + "end";
|
||||
process.addFlowElement(createExclusiveGateWayEnd(endExId));
|
||||
if (incoming == null || incoming.isEmpty()) {
|
||||
|
||||
@ -14,9 +14,11 @@ import org.flowable.bpmn.converter.BpmnXMLConverter;
|
||||
import org.flowable.bpmn.model.BaseElement;
|
||||
import org.flowable.bpmn.model.BpmnModel;
|
||||
import org.flowable.bpmn.model.EndEvent;
|
||||
import org.flowable.bpmn.model.ExclusiveGateway;
|
||||
import org.flowable.bpmn.model.ExtensionAttribute;
|
||||
import org.flowable.bpmn.model.FlowElement;
|
||||
import org.flowable.bpmn.model.Gateway;
|
||||
import org.flowable.bpmn.model.ParallelGateway;
|
||||
import org.flowable.bpmn.model.Process;
|
||||
import org.flowable.bpmn.model.SequenceFlow;
|
||||
import org.flowable.bpmn.model.StartEvent;
|
||||
@ -29,6 +31,7 @@ import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.UUID;
|
||||
|
||||
import static cn.axzo.workflow.common.constant.BpmConstants.END_EVENT_ID;
|
||||
import static cn.axzo.workflow.common.constant.BpmConstants.SEQUENCE_FLOW_ID;
|
||||
@ -99,7 +102,7 @@ public class BpmnJsonConverterUtil {
|
||||
mainProcess.addFlowElement(convertJsonToElement(EndEvent.class));
|
||||
|
||||
SequenceFlow sequenceFlow = new SequenceFlow();
|
||||
sequenceFlow.setId(SEQUENCE_FLOW_ID);
|
||||
sequenceFlow.setId(id(SEQUENCE_FLOW_ID));
|
||||
sequenceFlow.setSourceRef(lastNodeId);
|
||||
sequenceFlow.setTargetRef(END_EVENT_ID);
|
||||
mainProcess.addFlowElement(sequenceFlow);
|
||||
@ -147,8 +150,11 @@ public class BpmnJsonConverterUtil {
|
||||
case NODE_TASK:
|
||||
clz = UserTask.class;
|
||||
break;
|
||||
case NODE_ROUTER:
|
||||
clz = Gateway.class;
|
||||
case NODE_EXCLUSIVE_GATEWAY:
|
||||
clz = ExclusiveGateway.class;
|
||||
break;
|
||||
case NODE_PARALLEL_GATEWAY:
|
||||
clz = ParallelGateway.class;
|
||||
break;
|
||||
case NODE_CONDITION:
|
||||
clz = Gateway.class;
|
||||
@ -197,6 +203,10 @@ public class BpmnJsonConverterUtil {
|
||||
return target;
|
||||
}
|
||||
|
||||
public static String id(String prefix) {
|
||||
return prefix + "_" + UUID.randomUUID().toString().replace("-", "").toLowerCase();
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
String jsonStr = "{\n" +
|
||||
" \"id\": \"NODE_STARTER\",\n" +
|
||||
|
||||
@ -0,0 +1,10 @@
|
||||
package cn.axzo.workflow.core.converter.json;
|
||||
|
||||
/**
|
||||
* TODO
|
||||
*
|
||||
* @author wangli
|
||||
* @since 2023/10/16 20:51
|
||||
*/
|
||||
public class ExclusiveGatewayJsonConverter {
|
||||
}
|
||||
@ -0,0 +1,10 @@
|
||||
package cn.axzo.workflow.core.converter.json;
|
||||
|
||||
/**
|
||||
* TODO
|
||||
*
|
||||
* @author wangli
|
||||
* @since 2023/10/16 20:51
|
||||
*/
|
||||
public class ParallelGatewayJsonConverter {
|
||||
}
|
||||
@ -6,6 +6,7 @@ import org.flowable.bpmn.model.SequenceFlow;
|
||||
import java.util.List;
|
||||
|
||||
import static cn.axzo.workflow.common.constant.BpmConstants.SEQUENCE_FLOW_ID;
|
||||
import static cn.axzo.workflow.core.common.utils.BpmnJsonConverterUtil.id;
|
||||
|
||||
/**
|
||||
* 顺序流节点
|
||||
@ -24,7 +25,7 @@ public class SequenceFlowJsonConverter extends AbstractBpmnJsonConverter<Sequenc
|
||||
List<String> incoming = node.getIncoming().get("incoming");
|
||||
// TODO 缺少判断网关的逻辑
|
||||
SequenceFlow sequenceFlow = new SequenceFlow();
|
||||
sequenceFlow.setId(SEQUENCE_FLOW_ID);
|
||||
sequenceFlow.setId(id(SEQUENCE_FLOW_ID));
|
||||
sequenceFlow.setSourceRef(incoming.get(0));
|
||||
sequenceFlow.setTargetRef(node.getId());
|
||||
return sequenceFlow;
|
||||
|
||||
@ -1,41 +1,41 @@
|
||||
{
|
||||
"id": "NODE_STARTER",
|
||||
"type": "NODE_STARTER",
|
||||
"name": "发起",
|
||||
"type": "NODE_STARTER",
|
||||
"name": "发起",
|
||||
"children": {
|
||||
"id": "NODE_CONFIG",
|
||||
"parentId": "NODE_STARTER",
|
||||
"type": "NODE_TASK",
|
||||
"name": "权限配置",
|
||||
"children": {
|
||||
"id": "NODE_CONFIG",
|
||||
"parentId": "NODE_STARTER",
|
||||
"id": "NODE_RELEASE_DEV",
|
||||
"parentId": "NODE_CONFIG",
|
||||
"type": "NODE_TASK",
|
||||
"name": "发布 DEV",
|
||||
"children": {
|
||||
"id": "NODE_RELEASE_TEST",
|
||||
"parentId": "NODE_RELEASE_DEV",
|
||||
"type": "NODE_TASK",
|
||||
"name": "权限配置",
|
||||
"name": "发布 TEST",
|
||||
"children": {
|
||||
"id": "NODE_RELEASE_DEV",
|
||||
"parentId": "NODE_CONFIG",
|
||||
"id": "NODE_RELEASE_PRE",
|
||||
"parentId": "NODE_RELEASE_TEST",
|
||||
"type": "NODE_TASK",
|
||||
"name": "发布 PRE",
|
||||
"children": {
|
||||
"id": "NODE_RELEASE_PROD",
|
||||
"parentId": "NODE_RELEASE_PRE",
|
||||
"type": "NODE_TASK",
|
||||
"name": "发布 DEV",
|
||||
"name": "发布生产",
|
||||
"children": {
|
||||
"id": "NODE_RELEASE_TEST",
|
||||
"parentId": "NODE_RELEASE_DEV",
|
||||
"type": "NODE_TASK",
|
||||
"name": "发布 TEST",
|
||||
"children": {
|
||||
"id": "NODE_RELEASE_PRE",
|
||||
"parentId": "NODE_RELEASE_TEST",
|
||||
"type": "NODE_TASK",
|
||||
"name": "发布 PRE",
|
||||
"children": {
|
||||
"id": "NODE_RELEASE_PROD",
|
||||
"parentId": "NODE_RELEASE_PRE",
|
||||
"type": "NODE_TASK",
|
||||
"name": "发布生产",
|
||||
"children": {
|
||||
"id": "NODE_ACCEPTANCE",
|
||||
"parentId": "NODE_RELEASE_PROD",
|
||||
"type": "NODE_TASK",
|
||||
"name": "产品验收"
|
||||
}
|
||||
}
|
||||
}
|
||||
"id": "NODE_ACCEPTANCE",
|
||||
"parentId": "NODE_RELEASE_PROD",
|
||||
"type": "NODE_TASK",
|
||||
"name": "产品验收"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
454
workflow-engine-server/src/main/resources/配置台模型.json
Normal file
454
workflow-engine-server/src/main/resources/配置台模型.json
Normal file
@ -0,0 +1,454 @@
|
||||
{
|
||||
"id": "NODE_STARTER",
|
||||
"parentId": null,
|
||||
"type": "NODE_STARTER",
|
||||
"name": "发起人",
|
||||
"desc": "任何人",
|
||||
"props": {
|
||||
"assignedUser": [],
|
||||
"formPerms": []
|
||||
},
|
||||
"children": {
|
||||
"id": "node_545590085414",
|
||||
"parentId": "NODE_STARTER",
|
||||
"props": {
|
||||
"assignedType": "SELF",
|
||||
"mode": "AND",
|
||||
"sign": false,
|
||||
"nobody": {
|
||||
"handler": "TO_PASS",
|
||||
"assignedUser": []
|
||||
},
|
||||
"timeLimit": {
|
||||
"timeout": {
|
||||
"unit": "H",
|
||||
"value": 0
|
||||
},
|
||||
"handler": {
|
||||
"type": "REFUSE",
|
||||
"notify": {
|
||||
"once": true,
|
||||
"hour": 1
|
||||
}
|
||||
}
|
||||
},
|
||||
"assignedUser": [],
|
||||
"formPerms": [
|
||||
{
|
||||
"id": "field3933426667777",
|
||||
"title": "单行文本输入",
|
||||
"required": false,
|
||||
"perm": "R"
|
||||
}
|
||||
],
|
||||
"selfSelect": {
|
||||
"multiple": false
|
||||
},
|
||||
"leaderTop": {
|
||||
"endCondition": "TOP",
|
||||
"endLevel": 1
|
||||
},
|
||||
"leader": {
|
||||
"level": 1
|
||||
},
|
||||
"role": [],
|
||||
"refuse": {
|
||||
"type": "TO_END",
|
||||
"target": ""
|
||||
},
|
||||
"formUser": ""
|
||||
},
|
||||
"type": "NODE_TASK",
|
||||
"name": "审批人",
|
||||
"children": {
|
||||
"id": "node_049868581708",
|
||||
"parentId": "node_545590085414",
|
||||
"props": {},
|
||||
"type": "NODE_ROUTER",
|
||||
"name": "条件分支",
|
||||
"children": {
|
||||
"id": "node_049868589939",
|
||||
"parentId": "node_049868581708",
|
||||
"type": "EMPTY",
|
||||
"children": {}
|
||||
},
|
||||
"branchs": [
|
||||
{
|
||||
"id": "node_049868586156",
|
||||
"parentId": "node_049868581708",
|
||||
"type": "NODE_CONDITION",
|
||||
"props": {
|
||||
"groupsType": "AND",
|
||||
"groups": [
|
||||
{
|
||||
"groupType": "AND",
|
||||
"cids": [
|
||||
"root"
|
||||
],
|
||||
"conditions": [
|
||||
{
|
||||
"id": "root",
|
||||
"title": "发起人",
|
||||
"valueType": "User",
|
||||
"compare": "",
|
||||
"value": [
|
||||
{
|
||||
"id": 100001,
|
||||
"name": "Java1号",
|
||||
"type": "user",
|
||||
"sex": false,
|
||||
"selected": false
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"expression": "A"
|
||||
},
|
||||
"name": "条件1",
|
||||
"children": {
|
||||
"id": "node_050045756369",
|
||||
"parentId": "node_049868586156",
|
||||
"props": {
|
||||
"assignedType": "SELF_SELECT",
|
||||
"mode": "AND",
|
||||
"sign": false,
|
||||
"nobody": {
|
||||
"handler": "TO_PASS",
|
||||
"assignedUser": []
|
||||
},
|
||||
"timeLimit": {
|
||||
"timeout": {
|
||||
"unit": "H",
|
||||
"value": 0
|
||||
},
|
||||
"handler": {
|
||||
"type": "REFUSE",
|
||||
"notify": {
|
||||
"once": true,
|
||||
"hour": 1
|
||||
}
|
||||
}
|
||||
},
|
||||
"assignedUser": [],
|
||||
"formPerms": [
|
||||
{
|
||||
"id": "field3933426667777",
|
||||
"title": "单行文本输入",
|
||||
"required": false,
|
||||
"perm": "R"
|
||||
}
|
||||
],
|
||||
"selfSelect": {
|
||||
"multiple": false
|
||||
},
|
||||
"leaderTop": {
|
||||
"endCondition": "TOP",
|
||||
"endLevel": 1
|
||||
},
|
||||
"leader": {
|
||||
"level": 1
|
||||
},
|
||||
"role": [],
|
||||
"refuse": {
|
||||
"type": "TO_END",
|
||||
"target": ""
|
||||
},
|
||||
"formUser": ""
|
||||
},
|
||||
"type": "NODE_TASK",
|
||||
"name": "审批人",
|
||||
"children": {
|
||||
"id": "node_050323594620",
|
||||
"parentId": "node_050045756369",
|
||||
"props": {},
|
||||
"type": "CONCURRENTS",
|
||||
"name": "并行分支",
|
||||
"children": {
|
||||
"id": "node_050323593330",
|
||||
"parentId": "node_050323594620",
|
||||
"type": "EMPTY",
|
||||
"children": {
|
||||
"id": "node_050494094405",
|
||||
"parentId": "node_050323593330",
|
||||
"props": {
|
||||
"shouldAdd": false,
|
||||
"assignedUser": [
|
||||
{
|
||||
"id": 100003,
|
||||
"name": "Java3号",
|
||||
"type": "user",
|
||||
"sex": false,
|
||||
"selected": false
|
||||
}
|
||||
],
|
||||
"formPerms": [
|
||||
{
|
||||
"id": "field3933426667777",
|
||||
"title": "单行文本输入",
|
||||
"required": false,
|
||||
"perm": "R"
|
||||
}
|
||||
]
|
||||
},
|
||||
"type": "CC",
|
||||
"name": "抄送人",
|
||||
"children": {}
|
||||
}
|
||||
},
|
||||
"branchs": [
|
||||
{
|
||||
"id": "node_050323595280",
|
||||
"name": "分支1",
|
||||
"parentId": "node_050323594620",
|
||||
"type": "CONCURRENT",
|
||||
"props": {},
|
||||
"children": {
|
||||
"id": "node_050359097081",
|
||||
"parentId": "node_050323595280",
|
||||
"props": {
|
||||
"assignedType": "SELF_SELECT",
|
||||
"mode": "AND",
|
||||
"sign": false,
|
||||
"nobody": {
|
||||
"handler": "TO_PASS",
|
||||
"assignedUser": []
|
||||
},
|
||||
"timeLimit": {
|
||||
"timeout": {
|
||||
"unit": "H",
|
||||
"value": 0
|
||||
},
|
||||
"handler": {
|
||||
"type": "REFUSE",
|
||||
"notify": {
|
||||
"once": true,
|
||||
"hour": 1
|
||||
}
|
||||
}
|
||||
},
|
||||
"assignedUser": [],
|
||||
"formPerms": [
|
||||
{
|
||||
"id": "field3933426667777",
|
||||
"title": "单行文本输入",
|
||||
"required": false,
|
||||
"perm": "R"
|
||||
}
|
||||
],
|
||||
"selfSelect": {
|
||||
"multiple": false
|
||||
},
|
||||
"leaderTop": {
|
||||
"endCondition": "TOP",
|
||||
"endLevel": 1
|
||||
},
|
||||
"leader": {
|
||||
"level": 1
|
||||
},
|
||||
"role": [],
|
||||
"refuse": {
|
||||
"type": "TO_END",
|
||||
"target": ""
|
||||
},
|
||||
"formUser": ""
|
||||
},
|
||||
"type": "APPROVAL",
|
||||
"name": "审批人",
|
||||
"children": {}
|
||||
},
|
||||
"typeElse": false
|
||||
},
|
||||
{
|
||||
"id": "node_050323599136",
|
||||
"name": "分支2",
|
||||
"parentId": "node_050323594620",
|
||||
"type": "CONCURRENT",
|
||||
"props": {},
|
||||
"children": {
|
||||
"id": "node_050407266075",
|
||||
"parentId": "node_050323599136",
|
||||
"props": {
|
||||
"assignedType": "SELF_SELECT",
|
||||
"mode": "AND",
|
||||
"sign": false,
|
||||
"nobody": {
|
||||
"handler": "TO_PASS",
|
||||
"assignedUser": []
|
||||
},
|
||||
"timeLimit": {
|
||||
"timeout": {
|
||||
"unit": "H",
|
||||
"value": 0
|
||||
},
|
||||
"handler": {
|
||||
"type": "REFUSE",
|
||||
"notify": {
|
||||
"once": true,
|
||||
"hour": 1
|
||||
}
|
||||
}
|
||||
},
|
||||
"assignedUser": [],
|
||||
"formPerms": [
|
||||
{
|
||||
"id": "field3933426667777",
|
||||
"title": "单行文本输入",
|
||||
"required": false,
|
||||
"perm": "R"
|
||||
}
|
||||
],
|
||||
"selfSelect": {
|
||||
"multiple": false
|
||||
},
|
||||
"leaderTop": {
|
||||
"endCondition": "TOP",
|
||||
"endLevel": 1
|
||||
},
|
||||
"leader": {
|
||||
"level": 1
|
||||
},
|
||||
"role": [],
|
||||
"refuse": {
|
||||
"type": "TO_END",
|
||||
"target": ""
|
||||
},
|
||||
"formUser": ""
|
||||
},
|
||||
"type": "APPROVAL",
|
||||
"name": "审批人",
|
||||
"children": {}
|
||||
},
|
||||
"typeElse": true
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"typeElse": false
|
||||
},
|
||||
{
|
||||
"id": "node_049868587288",
|
||||
"parentId": "node_049868581708",
|
||||
"type": "NODE_CONDITION",
|
||||
"props": {
|
||||
"groupsType": "OR",
|
||||
"groups": [
|
||||
{
|
||||
"groupType": "AND",
|
||||
"cids": [],
|
||||
"conditions": []
|
||||
}
|
||||
],
|
||||
"expression": ""
|
||||
},
|
||||
"name": "条件2",
|
||||
"children": {
|
||||
"id": "node_050635779081",
|
||||
"parentId": "node_049868587288",
|
||||
"props": {
|
||||
"type": "EMAIL",
|
||||
"http": {
|
||||
"method": "GET",
|
||||
"url": "",
|
||||
"headers": [
|
||||
{
|
||||
"name": "",
|
||||
"isField": true,
|
||||
"value": ""
|
||||
}
|
||||
],
|
||||
"contentType": "FORM",
|
||||
"params": [
|
||||
{
|
||||
"name": "",
|
||||
"isField": true,
|
||||
"value": ""
|
||||
}
|
||||
],
|
||||
"retry": 1,
|
||||
"handlerByScript": false,
|
||||
"success": "function handlerOk(res) {\n return true;\n}",
|
||||
"fail": "function handlerFail(res) {\n return true;\n}"
|
||||
},
|
||||
"email": {
|
||||
"subject": "s",
|
||||
"to": "ss@axzo.cn",
|
||||
"content": "ssss"
|
||||
}
|
||||
},
|
||||
"type": "TRIGGER",
|
||||
"name": "触发器",
|
||||
"children": {
|
||||
"id": "node_050659439088",
|
||||
"parentId": "node_050635779081",
|
||||
"props": {
|
||||
"type": "FIXED",
|
||||
"time": "1",
|
||||
"unit": "M",
|
||||
"dateTime": ""
|
||||
},
|
||||
"type": "DELAY",
|
||||
"name": "延时处理",
|
||||
"children": {
|
||||
"id": "node_050826107631",
|
||||
"parentId": "node_050659439088",
|
||||
"props": {
|
||||
"assignedType": "SELF_SELECT",
|
||||
"mode": "AND",
|
||||
"sign": false,
|
||||
"nobody": {
|
||||
"handler": "TO_PASS",
|
||||
"assignedUser": []
|
||||
},
|
||||
"timeLimit": {
|
||||
"timeout": {
|
||||
"unit": "H",
|
||||
"value": 0
|
||||
},
|
||||
"handler": {
|
||||
"type": "REFUSE",
|
||||
"notify": {
|
||||
"once": true,
|
||||
"hour": 1
|
||||
}
|
||||
}
|
||||
},
|
||||
"assignedUser": [],
|
||||
"formPerms": [
|
||||
{
|
||||
"id": "field3933426667777",
|
||||
"title": "单行文本输入",
|
||||
"required": false,
|
||||
"perm": "R"
|
||||
}
|
||||
],
|
||||
"selfSelect": {
|
||||
"multiple": false
|
||||
},
|
||||
"leaderTop": {
|
||||
"endCondition": "TOP",
|
||||
"endLevel": 1
|
||||
},
|
||||
"leader": {
|
||||
"level": 1
|
||||
},
|
||||
"role": [],
|
||||
"refuse": {
|
||||
"type": "TO_END",
|
||||
"target": ""
|
||||
},
|
||||
"formUser": ""
|
||||
},
|
||||
"type": "NODE_TASK",
|
||||
"name": "审批人",
|
||||
"children": {}
|
||||
}
|
||||
}
|
||||
},
|
||||
"typeElse": true
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user