diff --git a/ruoyi-admin/src/main/resources/static/stencilset.json b/ruoyi-admin/src/main/resources/static/stencilset.json
deleted file mode 100644
index e58c64b35..000000000
--- a/ruoyi-admin/src/main/resources/static/stencilset.json
+++ /dev/null
@@ -1,1998 +0,0 @@
-{
- "title" : "流程编辑",
- "namespace" : "http://b3mn.org/stencilset/bpmn2.0#",
- "description" : "BPMN 流程编辑",
- "propertyPackages" : [ {
- "name" : "process_idpackage",
- "properties" : [ {
- "id" : "process_id",
- "type" : "String",
- "title" : "\u6d41\u7a0b\u6807\u8bc6",
- "value" : "process",
- "description" : "\u5b9a\u4e49\u6d41\u7a0b\u7684\u552f\u4e00\u6807\u8bc6\u7b26.",
- "popular" : true
- } ]
- }, {
- "name" : "overrideidpackage",
- "properties" : [ {
- "id" : "overrideid",
- "type" : "String",
- "title" : "\u7f16\u53f7",
- "value" : "",
- "description" : "\u5143\u7d20\u7684\u552f\u4e00\u6807\u8bc6\u7b26.",
- "popular" : true
- } ]
- }, {
- "name" : "namepackage",
- "properties" : [ {
- "id" : "name",
- "type" : "String",
- "title" : "\u540d\u79f0",
- "value" : "",
- "description" : "BPMN\u5143\u7d20\u7684\u63cf\u8ff0\u6027\u540d\u79f0.",
- "popular" : true,
- "refToView" : "text_name"
- } ]
- }, {
- "name" : "documentationpackage",
- "properties" : [ {
- "id" : "documentation",
- "type" : "Text",
- "title" : "\u8bf4\u660e",
- "value" : "",
- "description" : "BPMN\u5143\u7d20\u7684\u63cf\u8ff0\u6027\u540d\u79f0.",
- "popular" : true
- } ]
- }, {
- "name" : "process_authorpackage",
- "properties" : [ {
- "id" : "process_author",
- "type" : "String",
- "title" : "\u6d41\u7a0b\u4f5c\u8005",
- "value" : "",
- "description" : "\u5b9a\u4e49\u6d41\u7a0b\u7684\u4f5c\u8005.",
- "popular" : true
- } ]
- }, {
- "name" : "process_versionpackage",
- "properties" : [ {
- "id" : "process_version",
- "type" : "String",
- "title" : "\u6d41\u7a0b\u7248\u672c\u5b57\u7b26\u4e32 (\u4ec5\u6587\u6863)",
- "value" : "",
- "description" : "\u4e3a\u4e86\u6587\u6863\u7684\u7528\u9014\u7684\u7248\u672c\u6807\u8bc6\u7b26.",
- "popular" : true
- } ]
- }, {
- "name" : "process_historylevelpackage",
- "properties" : [ {
- "id" : "process_historylevel",
- "type" : "flowable-processhistorylevel",
- "title" : "为流程定义设定特定级别",
- "value" : "",
- "description" : "为流程定义设定特定级别",
- "popular" : true
- } ]
- }, {
- "name" : "isexecutablepackage",
- "properties" : [ {
- "id" : "isexecutable",
- "type" : "Boolean",
- "title" : "可执行的",
- "value" : "true",
- "description" : "流程是否可执行",
- "popular" : true
- } ]
- }, {
- "name" : "process_potentialstarteruserpackage",
- "properties" : [ {
- "id" : "process_potentialstarteruser",
- "type" : "String",
- "title" : "默认启动用户",
- "value" : "",
- "description" : "启动该流程的用户",
- "popular" : true
- } ]
- }, {
- "name" : "process_potentialstartergrouppackage",
- "properties" : [ {
- "id" : "process_potentialstartergroup",
- "type" : "String",
- "title" : "默认启动器组",
- "value" : "",
- "description" : "启动流程的组?",
- "popular" : true
- } ]
- }, {
- "name" : "process_namespacepackage",
- "properties" : [ {
- "id" : "process_namespace",
- "type" : "String",
- "title" : "\u6307\u5411\u547d\u540d\u7a7a\u95f4",
- "value" : "http://www.flowable.org/processdef",
- "description" : "\u5b9a\u4e49\u6d41\u7a0b\u7684\u6307\u5411\u547d\u540d\u7a7a\u95f4.",
- "popular" : true
- } ]
- }, {
- "name" : "process_iseagerexecutionfetchpackage",
- "properties" : [ {
- "id" : "iseagerexecutionfetch",
- "type" : "Boolean",
- "title" : "优先执行",
- "value" : "false",
- "description" : "流程定义需要优先执行?",
- "popular" : true
- } ]
- }, {
- "name" : "asynchronousdefinitionpackage",
- "properties" : [ {
- "id" : "asynchronousdefinition",
- "type" : "Boolean",
- "title" : "\u5f02\u6b65",
- "value" : "false",
- "description" : "\u6d3b\u52a8\u5b9a\u4e49\u4e3a\u5f02\u6b65.",
- "popular" : true
- } ]
- }, {
- "name" : "datapropertiespackage",
- "properties" : [ {
- "id" : "dataproperties",
- "type" : "Complex",
- "title" : "数据对象",
- "value" : "",
- "description" : "定义数据对象的属性",
- "popular" : true
- } ]
- }, {
- "name" : "exclusivedefinitionpackage",
- "properties" : [ {
- "id" : "exclusivedefinition",
- "type" : "Boolean",
- "title" : "\u72ec\u5bb6",
- "value" : "false",
- "description" : "\u5b9a\u4e49\u6d3b\u52a8\u4e3a\u72ec\u5bb6.",
- "popular" : true
- } ]
- }, {
- "name" : "executionlistenerspackage",
- "properties" : [ {
- "id" : "executionlisteners",
- "type" : "multiplecomplex",
- "title" : "\u6267\u884c\u76d1\u542c\u5668",
- "value" : "",
- "description" : "\u6d3b\u52a8\uff0c\u8fc7\u7a0b\uff0c\u987a\u5e8f\u6d41\uff0c\u5f00\u59cb\u548c\u7ed3\u675f\u4e8b\u4ef6\u7684\u76d1\u542c\u5668.",
- "popular" : true
- } ]
- }, {
- "name" : "tasklistenerspackage",
- "properties" : [ {
- "id" : "tasklisteners",
- "type" : "multiplecomplex",
- "title" : "\u4efb\u52a1\u76d1\u542c",
- "value" : "",
- "description" : "\u76d1\u542c\u7528\u6237\u4efb\u52a1",
- "popular" : true
- } ]
- }, {
- "name" : "eventlistenerspackage",
- "properties" : [ {
- "id" : "eventlisteners",
- "type" : "multiplecomplex",
- "title" : "\u4e8b\u4ef6\u76d1\u542c",
- "value" : "",
- "description" : "\u76d1\u542c\u6d41\u7a0b\u5f15\u64ce\u7684\u4efb\u4f55\u4e8b\u4ef6. \u4e5f\u53ef\u80fd\u629b\u51fa\u6d88\u606f\u4e8b\u4ef6\u6216\u8005\u9519\u8bef\u4e8b\u4ef6",
- "popular" : true
- } ]
- }, {
- "name" : "usertaskassignmentpackage",
- "properties" : [ {
- "id" : "usertaskassignment",
- "type" : "Complex",
- "title" : "\u5206\u914d",
- "value" : "",
- "description" : "\u5206\u914d\u5b9a\u4e49\u7528\u6237\u4efb\u52a1",
- "popular" : true
- } ]
- },{
- "name" : "formpropertiespackage",
- "properties" : [ {
- "id" : "formproperties",
- "type" : "Complex",
- "title" : "\u8868\u5355\u5c5e\u6027",
- "value" : "",
- "description" : "\u7528\u5217\u8868\u7684\u5f62\u5f0f\u5b9a\u4e49\u8868\u5355\u5c5e\u6027",
- "popular" : true
- } ]
- }, {
- "name" : "formkeydefinitionpackage",
- "properties" : [ {
- "id" : "formkeydefinition",
- "type" : "String",
- "title" : "\u8868\u5355\u952e(key)",
- "value" : "",
- "description" : "\u4e00\u4e2a\u8868\u5355\u7684\u552f\u4e00\u952e.",
- "popular" : true
- } ]
- }, {
- "name" : "duedatedefinitionpackage",
- "properties" : [ {
- "id" : "duedatedefinition",
- "type" : "String",
- "title" : "\u5230\u671f\u65f6\u95f4",
- "value" : "",
- "description" : "\u7528\u6237\u4efb\u52a1\u5230\u671f\u65f6\u95f4.",
- "popular" : true
- } ]
- }, {
- "name" : "prioritydefinitionpackage",
- "properties" : [ {
- "id" : "prioritydefinition",
- "type" : "String",
- "title" : "\u4f18\u5148\u7ea7",
- "value" : "",
- "description" : "\u7528\u6237\u4efb\u52a1\u7684\u4f18\u5148\u7ea7.",
- "popular" : true
- } ]
- }, {
- "name" : "duedatedefinitionpackage",
- "properties" : [ {
- "id" : "duedatedefinition",
- "type" : "String",
- "title" : "\u5230\u671f\u65f6\u95f4",
- "value" : "",
- "description" : "\u7528\u6237\u4efb\u52a1\u5230\u671f\u65f6\u95f4.",
- "popular" : true
- } ]
- }, {
- "name" : "servicetaskclasspackage",
- "properties" : [ {
- "id" : "servicetaskclass",
- "type" : "String",
- "title" : "\u7c7b",
- "value" : "",
- "description" : "\u5b9e\u73b0\u670d\u52a1\u4efb\u52a1\u903b\u8f91\u7684\u7c7b.",
- "popular" : true
- } ]
- }, {
- "name" : "servicetaskexpressionpackage",
- "properties" : [ {
- "id" : "servicetaskexpression",
- "type" : "Text",
- "title" : "\u8868\u8fbe\u5f0f",
- "value" : "",
- "description" : "\u670d\u52a1\u4efb\u52a1\u5b9a\u4e49\u7684\u903b\u8f91\u4e0e\u8868\u8fbe\u5f0f.",
- "popular" : true
- } ]
- }, {
- "name" : "servicetaskdelegateexpressionpackage",
- "properties" : [ {
- "id" : "servicetaskdelegateexpression",
- "type" : "Text",
- "title" : "\u59d4\u6258\u8868\u8fbe\u5f0f",
- "value" : "",
- "description" : "\u670d\u52a1\u4efb\u52a1\u5b9a\u4e49\u7684\u903b\u8f91\u4e0e\u59d4\u6258\u8868\u8fbe\u5f0f.",
- "popular" : true
- } ]
- }, {
- "name" : "servicetaskfieldspackage",
- "properties" : [ {
- "id" : "servicetaskfields",
- "type" : "Complex",
- "title" : "\u7c7b\u5b57\u6bb5",
- "value" : "",
- "description" : "\u6269\u5c55\u5b57\u6bb5",
- "popular" : true
- } ]
- }, {
- "name" : "servicetaskresultvariablepackage",
- "properties" : [ {
- "id" : "servicetaskresultvariable",
- "type" : "String",
- "title" : "\u7ed3\u679c\u53d8\u91cf\u540d\u79f0",
- "value" : "",
- "description" : "\u7528\u6765\u5b58\u50a8\u670d\u52a1\u4efb\u52a1\u7ed3\u679c\u7684\u53d8\u91cf\u540d.",
- "popular" : true
- } ]
- }, {
- "name" : "servicetaskresultvariablepackage",
- "properties" : [ {
- "id" : "servicetaskUseLocalScopeForResultVariable",
- "type" : "Boolean",
- "title" : "\u7ed3\u679c\u53d8\u91cf\u540d\u79f0",
- "value" : "false",
- "description" : "\u7528\u6765\u5b58\u50a8\u670d\u52a1\u4efb\u52a1\u7ed3\u679c\u7684\u53d8\u91cf\u540d.",
- "popular" : true
- } ]
- }, {
- "name" : "servicetasktriggerablepackage",
- "properties" : [ {
- "id" : "servicetasktriggerable",
- "type" : "Boolean",
- "title" : "将服务任务设置为可触发的",
- "value" : "false",
- "description" : "将服务任务设置为可触发的",
- "popular" : true
- } ]
- }, {
- "name": "scriptformatpackage",
- "properties" : [ {
- "id": "scriptformat",
- "type": "String",
- "title": "\u811a\u672c\u683c\u5f0f",
- "value": "",
- "description": "\u811a\u672c\u4efb\u52a1\u7684\u811a\u672c\u683c\u5f0f.",
- "popular": true
- } ]
- }, {
- "name": "scripttextpackage",
- "properties" : [ {
- "id": "scripttext",
- "type": "Text",
- "title": "\u811a\u672c",
- "value": "",
- "description": "\u811a\u672c\u4efb\u52a1\u7684\u811a\u672c\u5185\u5bb9.",
- "popular": true
- }
- ]
- }, {
- "name" : "shellcommandpackage",
- "properties" : [ {
- "id" : "shellcommand",
- "type" : "String",
- "title" : "命令",
- "value" : "",
- "description" : "脚本任务命令",
- "popular" : true
- } ]
- }, {
- "name" : "shellarg1package",
- "properties" : [ {
- "id" : "shellarg1",
- "type" : "Text",
- "title" : "参数 1",
- "value" : "",
- "description" : "脚本命令的参数 1",
- "popular" : true
- } ]
- }, {
- "name" : "shellarg2package",
- "properties" : [ {
- "id" : "shellarg2",
- "type" : "Text",
- "title" : "参数 2",
- "value" : "",
- "description" : "脚本命令参数 2",
- "popular" : true
- } ]
- }, {
- "name" : "shellarg3package",
- "properties" : [ {
- "id" : "shellarg3",
- "type" : "Text",
- "title" : "参数 3",
- "value" : "",
- "description" : "脚本命令参数 3",
- "popular" : true
- } ]
- }, {
- "name" : "shellarg4package",
- "properties" : [ {
- "id" : "shellarg4",
- "type" : "Text",
- "title" : "参数 4",
- "value" : "",
- "description" : "脚本命令参数 4",
- "popular" : true
- } ]
- }, {
- "name" : "shellarg5package",
- "properties" : [ {
- "id" : "shellarg5",
- "type" : "Text",
- "title" : "参数 5",
- "value" : "",
- "description" : "脚本命令参数 5",
- "popular" : true
- } ]
- }, {
- "name" : "shellwaitpackage",
- "properties" : [ {
- "id" : "shellwait",
- "type" : "Text",
- "title" : "等待",
- "value" : "",
- "description" : "等待shell命令执行结束的标志",
- "popular" : true
- } ]
- }, {
- "name" : "shelloutputvariablepackage",
- "properties" : [ {
- "id" : "shelloutputvariable",
- "type" : "Text",
- "title" : "输出参数",
- "value" : "",
- "description" : "变量存储shell共用输出",
- "popular" : true
- } ]
- }, {
- "name" : "shellerrorcodevariablepackage",
- "properties" : [ {
- "id" : "shellerrorcodevariable",
- "type" : "错误代码变量",
- "value" : "",
- "description" : "变量存储shell 命令错误代码",
- "popular" : true
- } ]
- }, {
- "name" : "shellredirecterrorpackage",
- "properties" : [ {
- "id" : "shellredirecterror",
- "type" : "Text",
- "title" : "重定向错误",
- "value" : "",
- "description" : "如果true合并错误输出与标准输出",
- "popular" : true
- } ]
- }, {
- "name" : "shellcleanenvpackage",
- "properties" : [ {
- "id" : "shellcleanenv",
- "type" : "Text",
- "title" : "清除环境",
- "value" : "",
- "description" : "清除shell执行环境",
- "popular" : true
- } ]
- }, {
- "name" : "shelldirectorypackage",
- "properties" : [ {
- "id" : "shelldirectory",
- "type" : "Text",
- "title" : "目录",
- "value" : "",
- "description" : "shell运行目录",
- "popular" : true
- } ]
- }, {
- "name" : "ruletask_rulespackage",
- "properties" : [ {
- "id" : "ruletask_rules",
- "type" : "String",
- "title" : "\u89c4\u5219",
- "value" : "",
- "description" : "\u89c4\u5219\u4efb\u52a1\u7684\u89c4\u5219.",
- "popular" : true
- } ]
- }, {
- "name" : "ruletask_variables_inputpackage",
- "properties" : [ {
- "id" : "ruletask_variables_input",
- "type" : "String",
- "title" : "\u8f93\u5165\u53d8\u91cf",
- "value" : "",
- "description" : "\u89c4\u5219\u4efb\u52a1\u7684\u8f93\u5165\u53d8\u91cf.",
- "popular" : true
- } ]
- }, {
- "name" : "ruletask_excludepackage",
- "properties" : [ {
- "id" : "ruletask_exclude",
- "type" : "Boolean",
- "title" : "\u6392\u9664",
- "value" : "false",
- "description" : "\u4f5c\u4e3a\u6392\u9664\u4f7f\u7528\u89c4\u5219\u5c5e\u6027.",
- "popular" : true
- } ]
- }, {
- "name" : "ruletask_resultpackage",
- "properties" : [ {
- "id" : "ruletask_result",
- "type" : "String",
- "title" : "\u8f93\u51fa\u53d8\u91cf",
- "value" : "",
- "description" : "\u89c4\u5219\u4efb\u52a1\u7684\u8f93\u51fa\u53d8\u91cf.",
- "popular" : true
- } ]
- }, {
- "name" : "mailtasktopackage",
- "properties" : [ {
- "id" : "mailtaskto",
- "type" : "Text",
- "title" : "\u63a5\u6536\u4eba",
- "value" : "",
- "description" : "\u5982\u679c\u662f\u591a\u4e2a\u6536\u4ef6\u4eba\uff0c\u8bf7\u4ee5\u9017\u53f7\u5206\u9694.",
- "popular" : true
- } ]
- }, {
- "name" : "mailtaskfrompackage",
- "properties" : [ {
- "id" : "mailtaskfrom",
- "type" : "Text",
- "title" : "\u53d1\u9001\u4eba",
- "value" : "",
- "description" : "\u53d1\u4ef6\u4eba\u7684\u7535\u5b50\u90ae\u4ef6\u5730\u5740\u3002\u5982\u679c\u672a\u63d0\u4f9b\uff0c\u4f7f\u7528\u9ed8\u8ba4\u914d\u7f6e\u7684\u53d1\u4ef6\u4eba\u5730\u5740.",
- "popular" : true
- } ]
- }, {
- "name" : "\u4e3b\u9898",
- "properties" : [ {
- "id" : "mailtasksubject",
- "type" : "Text",
- "title" : "Subject",
- "value" : "",
- "description" : "\u90ae\u4ef6\u4e3b\u9898.",
- "popular" : true
- } ]
- }, {
- "name" : "mailtaskccpackage",
- "properties" : [ {
- "id" : "mailtaskcc",
- "type" : "Text",
- "title" : "\u6284\u9001",
- "value" : "",
- "description" : "\u6284\u9001\u6536\u4ef6\u4eba\u5730\u5740. \u5982\u679c\u662f\u591a\u4e2a\u6536\u4ef6\u4eba\uff0c\u8bf7\u4ee5\u9017\u53f7\u5206\u9694",
- "popular" : true
- } ]
- }, {
- "name" : "mailtaskbccpackage",
- "properties" : [ {
- "id" : "mailtaskbcc",
- "type" : "Text",
- "title" : "\u5bc6\u4ef6\u6284\u9001",
- "value" : "",
- "description" : "u5bc6\u4ef6\u6284\u9001\u6536\u4ef6\u4eba\u5730\u5740. \u5982\u679c\u662f\u591a\u4e2a\u6536\u4ef6\u4eba\uff0c\u8bf7\u4ee5\u9017\u53f7\u5206\u9694",
- "popular" : true
- } ]
- }, {
- "name" : "mailtasktextpackage",
- "properties" : [ {
- "id" : "mailtasktext",
- "type" : "Text",
- "title" : "\u5185\u5bb9",
- "value" : "",
- "description" : "\u90ae\u4ef6\u5185\u5bb9\uff0c\u53ea\u80fd\u53d1\u9001\u7eaf\u6587\u672c\u3002\u5982\u679c\u9700\u8981\u53d1\u9001\u590d\u6742\u5185\u5bb9\uff0c\u53ef\u4ee5\u7ed3\u5408\u4f7f\u7528HTML\uff0c\u5ba2\u6237\u7aef\u4e0d\u652f\u6301\u590d\u6742\u5185\u5bb9\uff0c\u90ae\u4ef6\u5c06\u88ab\u9000\u56de.",
- "popular" : true
- } ]
- }, {
- "name" : "mailtaskhtmlpackage",
- "properties" : [ {
- "id" : "mailtaskhtml",
- "type" : "Text",
- "title" : "Html",
- "value" : "",
- "description" : "A piece of HTML that is the content of the e-mail.",
- "popular" : true
- } ]
- }, {
- "name" : "mailtaskcharsetpackage",
- "properties" : [ {
- "id" : "mailtaskcharset",
- "type" : "String",
- "title" : "Html",
- "value" : "",
- "description" : "\u4e00\u6bb5HTML\u7684\u90ae\u4ef6\u7684\u5185\u5bb9.",
- "popular" : true
- } ]
- }, {
- "name" : "httptaskrequestmethodpackage",
- "properties" : [ {
- "id" : "httptaskrequestmethod",
- "type" : "flowable-http-request-method",
- "title" : "请求方式",
- "value" : "",
- "description" : "请求方式 (例如 - GET,POST,PUT etc).",
- "popular" : true
- } ]
- }, {
- "name" : "httptaskrequesturlpackage",
- "properties" : [ {
- "id" : "httptaskrequesturl",
- "type" : "Text",
- "title" : "请求地址",
- "value" : "",
- "description" : "请求地址 (例如 - http://flowable.org).",
- "popular" : true
- } ]
- }, {
- "name" : "httptaskrequestheaderspackage",
- "properties" : [ {
- "id" : "httptaskrequestheaders",
- "type" : "Text",
- "title" : "请求头",
- "value" : "",
- "description" : "HTTP请求头的分开行 (例如 - Content-Type: application/json).",
- "popular" : true
- } ]
- }, {
- "name" : "httptaskrequestbodypackage",
- "properties" : [ {
- "id" : "httptaskrequestbody",
- "type" : "Text",
- "title" : "请求体",
- "value" : "",
- "description" : "请求体 (例如- ${sampleBody}).",
- "popular" : true
- } ]
- }, {
- "name" : "httptaskrequesttimeoutpackage",
- "properties" : [ {
- "id" : "httptaskrequesttimeout",
- "type" : "String",
- "title" : "请求超时",
- "value" : "",
- "description" : "请求超时以毫秒为单位 (For example - 5000).",
- "popular" : true
- } ]
- }, {
- "name" : "httptaskdisallowredirectspackage",
- "properties" : [ {
- "id" : "httptaskdisallowredirects",
- "type" : "String",
- "title" : "不允许重定向",
- "value" : "",
- "description" : "禁止HTTP重定向的标志。",
- "popular" : true
- } ]
- }, {
- "name" : "httptaskfailstatuscodespackage",
- "properties" : [ {
- "id" : "httptaskfailstatuscodes",
- "type" : "String",
- "title" : "失败状态码",
- "value" : "",
- "description" : "用逗号分隔的HTTP响应状态代码列表,例如 400,5XX.",
- "popular" : true
- } ]
- }, {
- "name" : "httptaskhandlestatuscodespackage",
- "properties" : [ {
- "id" : "httptaskhandlestatuscodes",
- "type" : "String",
- "title" : "处理状态码",
- "value" : "",
- "description" : "忽略HTTP响应状态代码列表的逗号, 例如 404,3XX.",
- "popular" : true
- } ]
- }, {
- "name" : "httptaskignoreexceptionpackage",
- "properties" : [ {
- "id" : "httptaskignoreexception",
- "type" : "String",
- "title" : "忽略异常",
- "value" : "",
- "description" : "忽略异常的标志",
- "popular" : true
- } ]
- },
- {
- "name" : "httptasksaveresponseparameterstransientpackage",
- "properties" : [ {
- "id" : "httptasksaveresponseparameterstransient",
- "type" : "String",
- "title" : "将响应保存为瞬态变量",
- "value" : "",
- "description" : "指示存储响应变量的标志",
- "popular" : true
- } ]
- },
- {
- "name" : "httptasksaveresponseasjsonpackage",
- "properties" : [ {
- "id" : "httptasksaveresponseasjson",
- "type" : "String",
- "title" : "保存响应为JSON",
- "value" : "",
- "description" : "指示将响应变量存储为JSON变量而不是字符串的标志",
- "popular" : true
- } ]
- },
- {
- "name": "skipexpressionpackage",
- "properties": [
- {
- "id": "skipexpression",
- "type": "String",
- "title": "自动跳过",
- "value": "",
- "description": "设置自动跳过的条件.",
- "popular": true
- }
- ]
- }, {
- "name": "nodetypepackage",
- "properties": [
- {
- "id": "nodetype",
- "type": "dragon-nodetype-combobox",
- "title": "节点类型",
- "value": "",
- "description": "节点类型",
- "popular": true,
- "items": [
- {
- "key": "审批中",
- "value": "applying"
- },
- {
- "key": "不审",
- "value": "noapprove"
- },
- {
- "key": "协同",
- "value": "coordination"
- },
- {
- "key": "评审",
- "value": "review"
- },
- {
- "key": "必审",
- "value": "bs"
- },
- {
- "key": "普通",
- "value": ""
- }
- ]
- }
- ]
- },{
- "name": "editdatapackage",
- "properties": [
- {
- "id": "iseditdata",
- "type": "dragon-nodeeditdata-combobox",
- "title": "是否可编辑",
- "value": "",
- "description": "数据在此节点是否可以编辑",
- "popular": true,
- "items":[
- {
- "key": "是",
- "value": "true"
- },
- {
- "key": "否",
- "value": ""
- }
- ]
- }
- ]
- },{
- "name": "sequenceflowtextxpackage",
- "properties": [
- {
- "id": "sequence_flow_text_x",
- "type": "String",
- "title": "线上文字位置",
- "value": "",
- "description": "线上文字位置",
- "popular": true
- }
- ]
- },{
- "name" : "httptaskresponsevariablenamepackage",
- "properties" : [ {
- "id" : "httptaskresponsevariablename",
- "type" : "String",
- "title" : "响应变量名",
- "value" : "",
- "description" : "定义变量名来存储HTTP响应.",
- "popular" : true
- } ]
- }, {
- "name" : "httptasksaverequestvariablespackage",
- "properties" : [ {
- "id" : "httptasksaverequestvariables",
- "type" : "String",
- "title" : "保存请求变量",
- "value" : "",
- "description" : "保存请求变量的标志.",
- "popular" : true
- } ]
- }, {
- "name" : "httptasksaveresponseparameterspackage",
- "properties" : [ {
- "id" : "httptasksaveresponseparameters",
- "type" : "String",
- "title" : "保存响应状态,标题",
- "value" : "",
- "description" : "保存响应状态、标题等的标志.",
- "popular" : true
- } ]
- }, {
- "name" : "httptaskresultvariableprefixpackage",
- "properties" : [ {
- "id" : "httptaskresultvariableprefix",
- "type" : "String",
- "title" : "结果变量前缀",
- "value" : "",
- "description" : "执行变量名称的前缀.",
- "popular" : true
- } ]
- }, {
- "name" : "callactivitycalledelementpackage",
- "properties" : [ {
- "id" : "callactivitycalledelement",
- "type" : "String",
- "title" : "\u8c03\u7528\u5143\u7d20",
- "value" : "",
- "description" : "\u6d41\u7a0b\u5f15\u7528.",
- "popular" : true
- } ]
- }, {
- "name" : "callactivityinparameterspackage",
- "properties" : [ {
- "id" : "callactivityinparameters",
- "type" : "Complex",
- "title" : "\u8f93\u5165\u53c2\u6570",
- "value" : "",
- "description" : "\u5b9a\u5165\u8f93\u51fa\u53c2\u6570",
- "popular" : true
- } ]
- }, {
- "name" : "callactivityoutparameterspackage",
- "properties" : [ {
- "id" : "callactivityoutparameters",
- "type" : "Complex",
- "title" : "\u8f93\u51fa\u53c2\u6570",
- "value" : "",
- "description" : "\u5b9a\u4e49\u8f93\u51fa\u53c2\u6570",
- "popular" : true
- } ]
- }, {
- "name" : "callactivityinheritvariablespackage",
- "properties" : [ {
- "id" : "callactivityinheritvariables",
- "type" : "Boolean",
- "title" : "继承子过程中的变量",
- "value" : "false",
- "description" : "继承子过程中的父进程变量.",
- "popular" : true
- } ]
- }, {
- "name" : "callactivitysamedeploymentpackage",
- "properties" : [ {
- "id" : "callactivitysamedeployment",
- "type" : "Boolean",
- "title" : "从相同的部署启动引用的进程.",
- "value" : "false",
- "description" : "使用来自相同部署的引用进程.",
- "popular" : true
- } ]
- }, {
- "name" : "callactivityprocessinstancenamepackage",
- "properties" : [ {
- "id" : "callactivityprocessinstancename",
- "type" : "String",
- "title" : "进程实例名",
- "value" : "",
- "description" : "一个解析到子进程实例名称的表达式",
- "popular" : true
- } ]
- }, {
- "name" : "callactivityinheritbusinesskeypackage",
- "properties" : [ {
- "id" : "callactivityinheritbusinesskey",
- "type" : "Boolean",
- "title" : "继承业务密钥",
- "value" : "false",
- "description" : "从父进程继承业务密钥.",
- "popular" : true
- } ]
- }, {
- "name" : "callactivityuselocalscopeforoutparameterspackage",
- "properties" : [ {
- "id" : "callactivityuselocalscopeforoutparameters",
- "type" : "Boolean",
- "title" : "使用局部范围进行输出参数",
- "value" : "false",
- "description" : "使用局部变量作用域输出参数.",
- "popular" : true
- } ]
- }, {
- "name" : "callactivitybusinesskeypackage",
- "properties" : [ {
- "id" : "callactivitybusinesskey",
- "type" : "String",
- "title" : "业务密钥表达式",
- "value" : "",
- "description" : "解析为子进程实例的业务密钥的表达式",
- "popular" : true
- } ]
- }, {
- "name" : "cameltaskcamelcontextpackage",
- "properties" : [ {
- "id" : "cameltaskcamelcontext",
- "type" : "String",
- "title" : "Camel context",
- "value" : "",
- "description" : "An optional camel context definition, if left empty the default is used.",
- "popular" : true
- } ]
- }, {
- "name" : "muletaskendpointurlpackage",
- "properties" : [ {
- "id" : "muletaskendpointurl",
- "type" : "String",
- "title" : "端点URL",
- "value" : "",
- "description" : "需要的端点URL将消息发送给Mule.",
- "popular" : true
- } ]
- }, {
- "name" : "muletasklanguagepackage",
- "properties" : [ {
- "id" : "muletasklanguage",
- "type" : "String",
- "title" : "语言",
- "value" : "",
- "description" : "解决负载表达式的语言所需的定义,如Juel.",
- "popular" : true
- } ]
- }, {
- "name" : "muletaskpayloadexpressionpackage",
- "properties" : [ {
- "id" : "muletaskpayloadexpression",
- "type" : "Text",
- "title" : "有效载荷表达式",
- "value" : "",
- "description" : "必需定义效载荷的消息发送给Mule.",
- "popular" : true
- } ]
- }, {
- "name" : "muletaskresultvariablepackage",
- "properties" : [ {
- "id" : "muletaskresultvariable",
- "type" : "String",
- "title" : "结果变量",
- "value" : "",
- "description" : "返回的有效载荷的可选结果变量.",
- "popular" : true
- } ]
- }, {
- "name" : "conditionsequenceflowpackage",
- "properties" : [ {
- "id" : "conditionsequenceflow",
- "type" : "Complex",
- "title" : "\u6d41\u6761\u4ef6",
- "value" : "",
- "description" : "\u987a\u5e8f\u6d41\u7684\u6761\u4ef6",
- "popular" : true
- } ]
- }, {
- "name" : "defaultflowpackage",
- "properties" : [ {
- "id" : "defaultflow",
- "type" : "Boolean",
- "title" : "\u9ed8\u8ba4\u6d41",
- "value" : "false",
- "description" : "\u5b9a\u4e49\u4f5c\u4e3a\u9ed8\u8ba4\u987a\u5e8f\u6d41",
- "popular" : true,
- "refToView" : "default"
- } ]
- }, {
- "name" : "conditionalflowpackage",
- "properties" : [ {
- "id" : "conditionalflow",
- "type" : "Boolean",
- "title" : "\u6761\u4ef6\u6d41",
- "value" : "false",
- "description" : "\u5b9a\u4e49\u987a\u5e8f\u6d41\u7684\u6761\u4ef6",
- "popular" : true
- } ]
- }, {
- "name" : "timercycledefinitionpackage",
- "properties" : [ {
- "id" : "timercycledefinition",
- "type" : "String",
- "title" : "\u65f6\u95f4\u5468\u671f\uff08\u4f8b\u5982R3/PT10H\uff09",
- "value" : "",
- "description" : "\u5b9a\u4e49ISO-8601\u5468\u671f\u5b9a\u65f6\u5668.",
- "popular" : true
- } ]
- }, {
- "name" : "timerdatedefinitionpackage",
- "properties" : [ {
- "id" : "timerdatedefinition",
- "type" : "String",
- "title" : "\u91c7\u7528ISO-8601\u65e5\u671f\u65f6\u95f4",
- "value" : "",
- "description" : "\u5b9a\u4e49ISO-8601\u65e5\u671f\u5b9a\u65f6\u5668.",
- "popular" : true
- } ]
- }, {
- "name" : "timerdurationdefinitionpackage",
- "properties" : [ {
- "id" : "timerdurationdefinition",
- "type" : "String",
- "title" : "\u6301\u7eed\u65f6\u95f4\uff08\u4f8b\u5982PT5M\uff09",
- "value" : "",
- "description" : "\u5b9a\u4e49ISO-8601\u65f6\u95f4\u5b9a\u65f6\u5668.",
- "popular" : true
- } ]
- }, {
- "name" : "timerenddatedefinitionpackage",
- "properties" : [ {
- "id" : "timerenddatedefinition",
- "type" : "String",
- "title" : "\u91c7\u7528ISO-8601\u7ed3\u675f\u65e5\u671f\u65f6\u95f4",
- "value" : "",
- "description" : "\u5b9a\u4e49\u5b9a\u65f6\u5668\u4e0eISO-8601\u6301\u7eed\u65f6\u95f4.",
- "popular" : true
- } ]
- }, {
- "name" : "messagerefpackage",
- "properties" : [ {
- "id" : "messageref",
- "type" : "String",
- "title" : "\u6d88\u606f\u5f15\u7528",
- "value" : "",
- "description" : "\u5b9a\u4e49\u6d88\u606f\u540d\u79f0.",
- "popular" : true
- } ]
- }, {
- "name" : "signalrefpackage",
- "properties" : [ {
- "id" : "signalref",
- "type" : "String",
- "title" : "\u4fe1\u53f7\u5f15\u7528",
- "value" : "",
- "description" : "\u5b9a\u4e49\u4fe1\u53f7\u540d\u79f0.",
- "popular" : true
- } ]
- }, {
- "name" : "errorrefpackage",
- "properties" : [ {
- "id" : "errorref",
- "type" : "String",
- "title" : "\u9519\u8bef\u5f15\u7528",
- "value" : "",
- "description" : "\u5b9a\u4e49\u9519\u8bef\u540d\u79f0.",
- "popular" : true
- } ]
- }, {
- "name" : "cancelactivitypackage",
- "properties" : [ {
- "id" : "cancelactivity",
- "type" : "Boolean",
- "title" : "\u53d6\u6d88 \u6d3b\u52a8(activity)",
- "value" : "true",
- "description" : "\u662f\u5426\u53d6\u6d88\u6d3b\u52a8",
- "popular" : true,
- "refToView" : [ "frame", "frame2" ]
- } ]
- }, {
- "name" : "initiatorpackage",
- "properties" : [ {
- "id" : "initiator",
- "type" : "String",
- "title" : "\u53d1\u8d77\u8005",
- "value" : "",
- "description" : "\u6d41\u7a0b\u7684\u53d1\u8d77\u8005.",
- "popular" : true
- } ]
- }, {
- "name" : "textpackage",
- "properties" : [ {
- "id" : "text",
- "type" : "String",
- "title" : "\u5185\u5bb9",
- "value" : "",
- "description" : "\u6587\u672c\u7684\u6587\u5b57\u6ce8\u91ca.",
- "popular" : true,
- "refToView" : "text"
- } ]
- }, {
- "name" : "multiinstance_typepackage",
- "properties" : [ {
- "id" : "multiinstance_type",
- "type" : "flowable-multiinstance",
- "title" : "\u591a\u5b9e\u4f8b\u7c7b\u578b",
- "value" : "None",
- "description" : "重复活动执行(并行或顺序)可以通过不同的循环类型来显示",
- "popular" : true,
- "refToView" : "multiinstance"
- } ]
- }, {
- "name" : "multiinstance_cardinalitypackage",
- "properties" : [ {
- "id" : "multiinstance_cardinality",
- "type" : "String",
- "title" : "\u57fa\u6570\uff08\u591a\u5b9e\u4f8b\uff09",
- "value" : "",
- "description" : "\u5b9a\u4e49\u591a\u5b9e\u4f8b\u7684\u57fa\u6570.",
- "popular" : true
- } ]
- }, {
- "name" : "multiinstance_collectionpackage",
- "properties" : [ {
- "id" : "multiinstance_collection",
- "type" : "String",
- "title" : "\u91c7\u96c6\uff08\u591a\u5b9e\u4f8b\uff09",
- "value" : "",
- "description" : "\u5b9a\u4e49\u96c6\u5408\u7684\u591a\u5b9e\u4f8b.",
- "popular" : true
- } ]
- }, {
- "name" : "multiinstance_variablepackage",
- "properties" : [ {
- "id" : "multiinstance_variable",
- "type" : "String",
- "title" : "\u5143\u7d20\u53d8\u91cf\uff08\u591a\u5b9e\u4f8b\uff09",
- "value" : "",
- "description" : "\u591a\u5b9e\u4f8b\u53d8\u91cf\u5b9a\u4e49\u7684\u5143\u7d20.",
- "popular" : true
- } ]
- }, {
- "name" : "multiinstance_conditionpackage",
- "properties" : [ {
- "id" : "multiinstance_condition",
- "type" : "String",
- "title" : "\u5b8c\u6210\u6761\u4ef6\uff08\u591a\u5b9e\u4f8b\uff09",
- "value" : "",
- "description" : "\u5b9a\u4e49\u591a\u5b9e\u4f8b\u7684\u5b8c\u6210\u6761\u4ef6.",
- "popular" : true
- } ]
- }, {
- "name" : "isforcompensationpackage",
- "properties" : [ {
- "id" : "isforcompensation",
- "type" : "Boolean",
- "title" : "\u8865\u507f",
- "value" : "false",
- "description" : "\u4e00\u4e2a\u6807\u5fd7\u6807\u8bc6\u6b64\u6d3b\u52a8\u7684\u76ee\u7684\u662f\u5426\u4e3a\u7684\u8865\u507f\u7684\u76ee\u7684.",
- "popular" : true,
- "refToView" : "compensation"
- } ]
- }, {
- "name" : "sequencefloworderpackage",
- "properties" : [ {
- "id" : "sequencefloworder",
- "type" : "Complex",
- "title" : "\u6d41\u987a\u5e8f",
- "value" : "",
- "description" : "\u6d41\u5f00\u59cb\u7684\u987a\u5e8f.",
- "popular" : true
- } ]
- }, {
- "name" : "signaldefinitionspackage",
- "properties" : [ {
- "id" : "signaldefinitions",
- "type" : "multiplecomplex",
- "title" : "\u4fe1\u53f7\u5b9a\u4e49",
- "value" : "",
- "description" : "\u4fe1\u53f7\u5b9a\u4e49",
- "popular" : true
- } ]
- }, {
- "name" : "messagedefinitionspackage",
- "properties" : [ {
- "id" : "messagedefinitions",
- "type" : "\u6d88\u606f\u5b9a\u4e49",
- "value" : "",
- "description" : "\u6d88\u606f\u5b9a\u4e49",
- "popular" : true
- } ]
- }, {
- "name" : "istransactionpackage",
- "properties" : [ {
- "id" : "istransaction",
- "type" : "Boolean",
- "title" : "\u662f\u4e00\u4e2a\u5b50\u6d41\u7a0b\u4e8b\u52a1",
- "value" : "false",
- "description" : "\u6807\u8bc6\u6b64\u5b50\u8fdb\u7a0b\u662f\u5426\u662f\u4ea4\u6613\u7c7b\u578b\u7684\u6807\u5fd7.",
- "popular" : true,
- "refToView" : "border"
- } ]
- }, {
- "name" : "formreferencepackage",
- "properties" : [ {
- "id" : "formreference",
- "type" : "Complex",
- "title" : "表单引用",
- "value" : "",
- "description" : "引用表单",
- "popular" : true
- } ]
- }, {
- "name" : "terminateAllpackage",
- "properties" : [ {
- "id" : "terminateAll",
- "type" : "Boolean",
- "title" : "\u7ec8\u6b62\u6240\u6709",
- "value" : "false",
- "description" : "\u542f\u7528\u7ec8\u6b62\u6d41\u7a0b\u5b9e\u4f8b",
- "popular" : true
- } ]
- }, {
- "name" : "decisiontaskdecisiontablereferencepackage",
- "properties" : [ {
- "id" : "decisiontaskdecisiontablereference",
- "type" : "Complex",
- "title" : "决策表参考",
- "value" : "",
- "description" : "设置决策表参考",
- "popular" : true
- } ]
- }, {
- "name" : "decisiontaskthrowerroronnohitspackage",
- "properties" : [ {
- "id" : "decisiontaskthrowerroronnohits",
- "type" : "Boolean",
- "title" : "如果没有命中规则,则抛出错误",
- "value" : "false",
- "description" : "如果没有命中决策表的规则,结果是否被发现,则会引发错误.",
- "popular" : true
- } ]
- }, {
- "name" : "interruptingpackage",
- "properties" : [ {
- "id" : "interrupting",
- "type" : "Boolean",
- "title" : "中断",
- "value" : "true",
- "description" : "是否应终止所有父执行?",
- "popular" : true,
- "refToView" : [ "frame" ]
- } ]
- }, {
- "name" : "completionconditionpackage",
- "properties" : [ {
- "id" : "completioncondition",
- "type" : "String",
- "title" : "完成条件",
- "value" : "",
- "description" : "子过程的完备性条件",
- "popular" : true
- } ]
- }, {
- "name" : "orderingpackage",
- "properties" : [ {
- "id" : "ordering",
- "type" : "flowable-ordering",
- "title" : "排序",
- "value" : "Parallel",
- "description" : "AdHoc子过程的排序",
- "popular" : true
- } ]
- }, {
- "name" : "cancelremaininginstancespackage",
- "properties" : [ {
- "id" : "cancelremaininginstances",
- "type" : "Boolean",
- "title" : "取消剩余实例",
- "value" : "true",
- "description" : "取消AdHoc子进程的剩余实例?",
- "popular" : true
- } ]
- } ],
- "stencils" : [ {
- "type" : "node",
- "id" : "BPMNDiagram",
- "title" : "BPMN\u56fe\u8868",
- "description" : "A BPMN 2.0 diagram.",
- "view" : "\n",
- "icon" : "diagram.png",
- "groups" : [ "图解" ],
- "mayBeRoot" : true,
- "hide" : true,
- "propertyPackages" : [ "process_idpackage", "namepackage", "documentationpackage", "process_authorpackage", "process_versionpackage", "process_namespacepackage", "process_historylevelpackage", "isexecutablepackage", "datapropertiespackage", "executionlistenerspackage", "eventlistenerspackage", "signaldefinitionspackage", "messagedefinitionspackage", "process_potentialstarteruserpackage","process_potentialstartergrouppackage", "process_iseagerexecutionfetchpackage" ],
- "hiddenPropertyPackages" : [ ],
- "roles" : [ ]
- }, {
- "type" : "node",
- "id" : "StartNoneEvent",
- "title" : "\u5f00\u59cb\u4e8b\u4ef6",
- "description" : "\u4e0d\u5e26\u5177\u4f53\u7684\u89e6\u53d1\u7684\u5f00\u59cb\u4e8b\u4ef6",
- "view" : "\n",
- "icon" : "startevent/none.png",
- "groups" : [ "\u542f\u52a8\u4e8b\u4ef6" ],
- "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "executionlistenerspackage", "initiatorpackage", "formkeydefinitionpackage", "formreferencepackage", "formpropertiespackage" ],
- "hiddenPropertyPackages" : [ ],
- "roles" : [ "sequence_start", "Startevents_all", "StartEventsMorph", "all" ]
- }, {
- "type" : "node",
- "id" : "StartTimerEvent",
- "title" : "\u8ba1\u65f6\u5668\u4e8b\u4ef6",
- "description" : "\u5e26\u6709\u8ba1\u65f6\u5668\u7684\u89e6\u53d1\u4e8b\u4ef6",
- "view" : "\n",
- "icon" : "startevent/timer.png",
- "groups" : [ "\u542f\u52a8\u4e8b\u4ef6" ],
- "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "executionlistenerspackage", "timercycledefinitionpackage", "timerdatedefinitionpackage", "timerdurationdefinitionpackage" ],
- "hiddenPropertyPackages" : [ ],
- "roles" : [ "sequence_start", "Startevents_all", "StartEventsMorph", "all" ]
- }, {
- "type" : "node",
- "id" : "StartSignalEvent",
- "title" : "\u4fe1\u53f7\u4e8b\u4ef6",
- "description" : "\u5e26\u6709\u4fe1\u53f7\u7684\u89e6\u53d1\u4e8b\u4ef6",
- "view" : "\n",
- "icon" : "startevent/signal.png",
- "groups" : [ "\u542f\u52a8\u4e8b\u4ef6" ],
- "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "executionlistenerspackage", "signalrefpackage", "interruptingpackage" ],
- "hiddenPropertyPackages" : [ ],
- "roles" : [ "sequence_start", "Startevents_all", "StartEventsMorph", "all" ]
- }, {
- "type" : "node",
- "id" : "StartMessageEvent",
- "title" : "\u6d88\u606f\u4e8b\u4ef6",
- "description" : "\u5e26\u6709\u6d88\u606f\u7684\u89e6\u53d1\u4e8b\u4ef6",
- "view" : "\n",
- "icon" : "startevent/message.png",
- "groups" : [ "\u542f\u52a8\u4e8b\u4ef6" ],
- "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "executionlistenerspackage", "messagerefpackage", "interruptingpackage" ],
- "hiddenPropertyPackages" : [ ],
- "roles" : [ "sequence_start", "Startevents_all", "StartEventsMorph", "all" ]
- }, {
- "type" : "node",
- "id" : "StartErrorEvent",
- "title" : "\u9519\u8bef\u4e8b\u4ef6",
- "description" : "\u6355\u83b7BPMN\u9519\u8bef\u4e8b\u4ef6",
- "view" : "\n",
- "icon" : "startevent/error.png",
- "groups" : [ "\u542f\u52a8\u4e8b\u4ef6" ],
- "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "executionlistenerspackage", "errorrefpackage", "interruptingpackage" ],
- "hiddenPropertyPackages" : [ ],
- "roles" : [ "sequence_start", "Startevents_all", "StartEventsMorph", "all" ]
- }, {
- "type" : "node",
- "id" : "UserTask",
- "title" : "\u7528\u6237\u4efb\u52a1",
- "description" : "\u4efb\u52a1\u624b\u52a8\u5206\u914d\u7ed9\u4e00\u4e2a\u7279\u5b9a\u7684\u4eba",
- "view" : "\n",
- "icon" : "activity/list/type.user.png",
- "groups" : [ "\u4efb\u52a1" ],
- "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "asynchronousdefinitionpackage", "exclusivedefinitionpackage", "executionlistenerspackage", "multiinstance_typepackage", "multiinstance_cardinalitypackage", "multiinstance_collectionpackage", "multiinstance_variablepackage", "multiinstance_conditionpackage", "isforcompensationpackage", "usertaskassignmentpackage", "formkeydefinitionpackage", "formreferencepackage", "duedatedefinitionpackage", "prioritydefinitionpackage", "formpropertiespackage", "tasklistenerspackage", "skipexpressionpackage","nodetypepackage","editdatapackage" ],
- "hiddenPropertyPackages" : [ ],
- "roles" : [ "Activity", "sequence_start", "sequence_end", "ActivitiesMorph", "all" ]
- }, {
- "type" : "node",
- "id" : "ServiceTask",
- "title" : "\u670d\u52a1\u4efb\u52a1",
- "description" : "\u4e1a\u52a1\u903b\u8f91\u81ea\u52a8\u4efb\u52a1",
- "view" : "\n",
- "icon" : "activity/list/type.service.png",
- "groups" : [ "\u4efb\u52a1" ],
- "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "asynchronousdefinitionpackage", "exclusivedefinitionpackage", "servicetasktriggerablepackage", "executionlistenerspackage", "multiinstance_typepackage", "multiinstance_cardinalitypackage", "multiinstance_collectionpackage", "multiinstance_variablepackage", "multiinstance_conditionpackage", "isforcompensationpackage", "servicetaskclasspackage", "servicetaskexpressionpackage", "servicetaskdelegateexpressionpackage", "servicetaskfieldspackage", "servicetaskresultvariablepackage", "skipexpressionpackage" ],
- "hiddenPropertyPackages" : [ ],
- "roles" : [ "Activity", "sequence_start", "sequence_end", "ActivitiesMorph", "all" ]
- }, {
- "type" : "node",
- "id" : "ScriptTask",
- "title" : "\u811a\u672c\u4efb\u52a1",
- "description" : "\u81ea\u52a8\u811a\u672c\u903b\u8f91\u4efb\u52a1",
- "view" : "\n",
- "icon" : "activity/list/type.script.png",
- "groups" : [ "\u4efb\u52a1" ],
- "propertyPackages" : [ "scriptformatpackage", "scripttextpackage", "overrideidpackage", "namepackage", "documentationpackage", "asynchronousdefinitionpackage", "exclusivedefinitionpackage", "executionlistenerspackage", "multiinstance_typepackage", "multiinstance_cardinalitypackage", "multiinstance_collectionpackage", "multiinstance_variablepackage", "multiinstance_conditionpackage", "isforcompensationpackage" ],
- "hiddenPropertyPackages" : [ ],
- "roles" : [ "Activity", "sequence_start", "sequence_end", "ActivitiesMorph", "all" ]
- }, {
- "type" : "node",
- "id" : "BusinessRule",
- "title" : "\u4e1a\u52a1\u89c4\u5219\u4efb\u52a1",
- "description" : "\u89c4\u5219\u903b\u8f91\u81ea\u52a8\u4efb\u52a1",
- "view" : "\n",
- "icon" : "activity/list/type.business.rule.png",
- "groups" : [ "\u4efb\u52a1" ],
- "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "asynchronousdefinitionpackage", "exclusivedefinitionpackage", "executionlistenerspackage", "multiinstance_typepackage", "multiinstance_cardinalitypackage", "multiinstance_collectionpackage", "multiinstance_variablepackage", "multiinstance_conditionpackage", "isforcompensationpackage", "ruletask_rulespackage", "ruletask_variables_inputpackage", "ruletask_excludepackage", "ruletask_resultpackage" ],
- "hiddenPropertyPackages" : [ ],
- "roles" : [ "Activity", "sequence_start", "sequence_end", "ActivitiesMorph", "all" ]
- }, {
- "type" : "node",
- "id" : "ReceiveTask",
- "title" : "\u63a5\u6536\u4efb\u52a1",
- "description" : "\u8be5\u4efb\u52a1\u7b49\u5f85\u63a5\u6536",
- "view" : "\n",
- "icon" : "activity/list/type.receive.png",
- "groups" : [ "\u4efb\u52a1" ],
- "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "asynchronousdefinitionpackage", "exclusivedefinitionpackage", "executionlistenerspackage", "multiinstance_typepackage", "multiinstance_cardinalitypackage", "multiinstance_collectionpackage", "multiinstance_variablepackage", "multiinstance_conditionpackage", "isforcompensationpackage" ],
- "hiddenPropertyPackages" : [ ],
- "roles" : [ "Activity", "sequence_start", "sequence_end", "ActivitiesMorph", "all" ]
- }, {
- "type" : "node",
- "id" : "ManualTask",
- "title" : "\u624b\u52a8\u4efb\u52a1",
- "description" : "\u6ca1\u6709\u903b\u8f91\u7684\u81ea\u52a8\u4efb\u52a1",
- "view" : "\n",
- "icon" : "activity/list/type.manual.png",
- "groups" : [ "\u4efb\u52a1" ],
- "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "asynchronousdefinitionpackage", "exclusivedefinitionpackage", "executionlistenerspackage", "multiinstance_typepackage", "multiinstance_cardinalitypackage", "multiinstance_collectionpackage", "multiinstance_variablepackage", "multiinstance_conditionpackage", "isforcompensationpackage" ],
- "hiddenPropertyPackages" : [ ],
- "roles" : [ "Activity", "sequence_start", "sequence_end", "ActivitiesMorph", "all" ]
- }, {
- "type" : "node",
- "id" : "MailTask",
- "title" : "\u90ae\u4ef6\u4efb\u52a1",
- "description" : "\u90ae\u4ef6\u4efb\u52a1",
- "view" : "\n",
- "icon" : "activity/list/type.send.png",
- "groups" : [ "\u4efb\u52a1" ],
- "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "asynchronousdefinitionpackage", "exclusivedefinitionpackage", "executionlistenerspackage", "multiinstance_typepackage", "multiinstance_cardinalitypackage", "multiinstance_collectionpackage", "multiinstance_variablepackage", "multiinstance_conditionpackage", "isforcompensationpackage", "mailtasktopackage", "mailtaskfrompackage", "mailtasksubjectpackage", "mailtaskccpackage", "mailtaskbccpackage", "mailtasktextpackage", "mailtaskhtmlpackage", "mailtaskcharsetpackage" ],
- "hiddenPropertyPackages" : [ ],
- "roles" : [ "Activity", "sequence_start", "sequence_end", "ActivitiesMorph", "all" ]
- }, {
- "type" : "node",
- "id" : "CamelTask",
- "title" : "\u9a7c\u5cf0\u4efb\u52a1",
- "description" : "\u53d1\u9001\u6d88\u606f\u7ed9\u9a7c\u5cf0\u7684\u4efb\u52a1",
- "view" : "\n",
- "icon" : "activity/list/type.camel.png",
- "groups" : [ "\u4efb\u52a1" ],
- "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "asynchronousdefinitionpackage", "exclusivedefinitionpackage", "executionlistenerspackage", "multiinstance_typepackage", "multiinstance_cardinalitypackage", "multiinstance_collectionpackage", "multiinstance_variablepackage", "multiinstance_conditionpackage", "isforcompensationpackage", "cameltaskcamelcontextpackage" ],
- "hiddenPropertyPackages" : [ ],
- "roles" : [ "Activity", "sequence_start", "sequence_end", "ActivitiesMorph", "all" ]
- }, {
- "type" : "node",
- "id" : "HttpTask",
- "title" : "HTTP任务",
- "description" : "一个HTTP任务",
- "view" : "\n",
- "icon" : "activity/list/type.http.png",
- "groups" : [ "\u4efb\u52a1" ],
- "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "asynchronousdefinitionpackage", "exclusivedefinitionpackage", "executionlistenerspackage", "multiinstance_typepackage", "multiinstance_cardinalitypackage", "multiinstance_collectionpackage", "multiinstance_variablepackage", "multiinstance_conditionpackage", "isforcompensationpackage", "httptaskrequestmethodpackage", "httptaskrequesturlpackage", "httptaskrequestheaderspackage", "httptaskrequestbodypackage", "httptaskrequesttimeoutpackage", "httptaskdisallowredirectspackage", "httptaskfailstatuscodespackage", "httptaskhandlestatuscodespackage", "httptaskignoreexceptionpackage", "httptaskresponsevariablenamepackage", "httptasksaverequestvariablespackage", "httptasksaveresponseparameterspackage", "httptaskresultvariableprefixpackage", "httptasksaveresponseparameterstransientpackage", "httptasksaveresponseasjsonpackage" ],
- "hiddenPropertyPackages" : [ ],
- "roles" : [ "Activity", "sequence_start", "sequence_end", "ActivitiesMorph", "all" ]
- }, {
- "type" : "node",
- "id" : "MuleTask",
- "title" : "Mule 任务",
- "description" : "发送消息的任务给Mule",
- "view" : "\n",
- "icon" : "activity/list/type.mule.png",
- "groups" : [ "\u4efb\u52a1" ],
- "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "asynchronousdefinitionpackage", "exclusivedefinitionpackage", "executionlistenerspackage", "multiinstance_typepackage", "multiinstance_cardinalitypackage", "multiinstance_collectionpackage", "multiinstance_variablepackage", "multiinstance_conditionpackage", "isforcompensationpackage", "muletaskendpointurlpackage", "muletasklanguagepackage", "muletaskpayloadexpressionpackage", "muletaskresultvariablepackage" ],
- "hiddenPropertyPackages" : [ ],
- "roles" : [ "Activity", "sequence_start", "sequence_end", "ActivitiesMorph", "all" ]
- }, {
- "type" : "node",
- "id" : "SendTask",
- "title" : "\u53d1\u9001\u4efb\u52a1",
- "description" : "\u53d1\u9001\u6d88\u606f\u7684\u4efb\u52a1",
- "view" : "\n",
- "icon" : "activity/list/type.send.png",
- "groups" : [ "\u4efb\u52a1" ],
- "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "asynchronousdefinitionpackage", "exclusivedefinitionpackage", "executionlistenerspackage", "multiinstance_typepackage", "multiinstance_cardinalitypackage", "multiinstance_collectionpackage", "multiinstance_variablepackage", "multiinstance_conditionpackage", "isforcompensationpackage" ],
- "hiddenPropertyPackages" : [ ],
- "roles" : [ "Activity", "sequence_start", "sequence_end", "ActivitiesMorph", "all" ]
- }, {
- "type" : "node",
- "id" : "DecisionTask",
- "title" : "决策任务",
- "description" : "使用可流动DMN规则引擎的任务",
- "view" : "\n",
- "icon" : "activity/list/type.decision.png",
- "groups" : [ "\u4efb\u52a1" ],
- "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "asynchronousdefinitionpackage", "exclusivedefinitionpackage", "executionlistenerspackage", "multiinstance_typepackage", "multiinstance_cardinalitypackage", "multiinstance_collectionpackage", "multiinstance_variablepackage", "multiinstance_conditionpackage", "isforcompensationpackage", "decisiontaskdecisiontablereferencepackage", "decisiontaskthrowerroronnohitspackage" ],
- "hiddenPropertyPackages" : [ ],
- "roles" : [ "Activity", "sequence_start", "sequence_end", "ActivitiesMorph", "all" ]
- },
- {
- "type": "node",
- "id": "ShellTask",
- "title": "Shell任务",
- "description": "shell批量逻辑的自动任务",
- "view": "\n",
- "icon": "activity/list/type.shell.png",
- "groups": [
- "\u4efb\u52a1"
- ],
- "propertyPackages": [
- "overrideidpackage",
- "namepackage",
- "documentationpackage",
- "asynchronousdefinitionpackage",
- "shellcommandpackage",
- "shellarg1package",
- "shellarg2package",
- "shellarg3package",
- "shellarg4package",
- "shellarg5package",
- "shellwaitpackage",
- "shelloutputvariablepackage",
- "shellerrorcodevariablepackage",
- "shellredirecterrorpackage",
- "shellcleanenvpackage",
- "shelldirectorypackage",
- "exclusivedefinitionpackage",
- "executionlistenerspackage",
- "multiinstance_typepackage",
- "multiinstance_cardinalitypackage",
- "multiinstance_collectionpackage",
- "multiinstance_variablepackage",
- "multiinstance_conditionpackage",
- "isforcompensationpackage"
- ],
- "hiddenPropertyPackages": [],
- "roles": [
- "Activity",
- "sequence_start",
- "sequence_end",
- "ActivitiesMorph",
- "all"
- ]
- },{
- "type" : "node",
- "id" : "SubProcess",
- "title" : "\u5b50\u6d41\u7a0b",
- "description" : "\u5b50\u6d41\u7a0b\u8303\u56f4",
- "view" : "\n",
- "icon" : "activity/expanded.subprocess.png",
- "groups" : [ "子流程" ],
- "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "asynchronousdefinitionpackage", "exclusivedefinitionpackage", "datapropertiespackage", "executionlistenerspackage", "multiinstance_typepackage", "multiinstance_cardinalitypackage", "multiinstance_collectionpackage", "multiinstance_variablepackage", "multiinstance_conditionpackage", "istransactionpackage" ],
- "hiddenPropertyPackages" : [ ],
- "roles" : [ "Activity", "sequence_start", "sequence_end", "all" ]
- },{
- "type" : "node",
- "id" : "CollapsedSubProcess",
- "title" : "折叠子过程",
- "description" : "子过程范围",
- "view" : "\n",
- "icon" : "activity/subprocess.png",
- "groups" : [ "子流程" ],
- "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "asynchronousdefinitionpackage", "exclusivedefinitionpackage", "datapropertiespackage", "executionlistenerspackage", "multiinstance_typepackage", "multiinstance_cardinalitypackage", "multiinstance_collectionpackage", "multiinstance_variablepackage", "multiinstance_conditionpackage", "istransactionpackage" ],
- "hiddenPropertyPackages" : [ ],
- "roles" : [ "Activity", "sequence_start", "sequence_end", "all" ]
- },{
- "type" : "node",
- "id" : "EventSubProcess",
- "title" : "事件子流程",
- "description" : "\u5b50\u6d41\u7a0b\u4e8b\u4ef6\u8303\u56f4",
- "view" : "\n",
- "icon" : "activity/event.subprocess.png",
- "groups" : [ "子流程" ],
- "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "asynchronousdefinitionpackage", "exclusivedefinitionpackage", "executionlistenerspackage" ],
- "hiddenPropertyPackages" : [ ],
- "roles" : [ "Activity", "all", "EventSubProcess" ]
- }, {
- "type" : "node",
- "id" : "CallActivity",
- "title" : "活动子流程",
- "description" : "\u547c\u53eb\u6d3b\u52a8",
- "view" : "\n",
- "icon" : "activity/task.png",
- "groups" : [ "子流程" ],
- "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "asynchronousdefinitionpackage", "exclusivedefinitionpackage", "executionlistenerspackage", "callactivitycalledelementpackage", "callactivityinparameterspackage", "callactivityoutparameterspackage", "callactivityinheritvariablespackage", "callactivitysamedeploymentpackage", "callactivityprocessinstancenamepackage", "callactivityinheritbusinesskeypackage", "callactivitybusinesskeypackage", "callactivityuselocalscopeforoutparameterspackage", "multiinstance_typepackage", "multiinstance_cardinalitypackage", "multiinstance_collectionpackage", "multiinstance_variablepackage", "multiinstance_conditionpackage", "isforcompensationpackage" ],
- "hiddenPropertyPackages" : [ ],
- "roles" : [ "Activity", "sequence_start", "sequence_end", "all" ]
- }, {
- "type" : "node",
- "id" : "ExclusiveGateway",
- "title" : "\u9ad8\u7ea7\u5206\u652f",
- "description" : "\u9ad8\u7ea7\u5206\u652f",
- "view" : "\n\n",
- "icon" : "gateway/exclusive.databased.png",
- "groups" : [ "\u7f51\u5173" ],
- "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "asynchronousdefinitionpackage", "exclusivedefinitionpackage", "sequencefloworderpackage" ],
- "hiddenPropertyPackages" : [ ],
- "roles" : [ "sequence_start", "GatewaysMorph", "sequence_end", "all" ]
- }, {
- "type" : "node",
- "id" : "ParallelGateway",
- "title" : "\u5e76\u884c\u5206\u652f",
- "description" : "\u5e76\u884c\u5206\u652f\u7528\u6765\u5bf9\u6d41\u7a0b\u4e2d\u7684\u5e76\u53d1\u8fdb\u884c\u5efa\u6a21",
- "view" : "\n\n",
- "icon" : "gateway/parallel.png",
- "groups" : [ "\u7f51\u5173" ],
- "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "asynchronousdefinitionpackage", "exclusivedefinitionpackage", "sequencefloworderpackage" ],
- "hiddenPropertyPackages" : [ ],
- "roles" : [ "sequence_start", "GatewaysMorph", "sequence_end", "all" ]
- }, {
- "type" : "node",
- "id" : "InclusiveGateway",
- "title" : "\u5305\u5bb9\u5206\u652f",
- "description" : "\u5305\u5bb9\u5206\u652f\u53ef\u4ee5\u88ab\u89c6\u4e3a\u662f\u6392\u4ed6\u5206\u652f\u548c\u5e76\u884c\u5206\u652f\u7684\u7ed3\u5408",
- "view" : "\n\n",
- "icon" : "gateway/inclusive.png",
- "groups" : [ "\u7f51\u5173" ],
- "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "asynchronousdefinitionpackage", "exclusivedefinitionpackage", "sequencefloworderpackage" ],
- "hiddenPropertyPackages" : [ ],
- "roles" : [ "sequence_start", "GatewaysMorph", "sequence_end", "all" ]
- }, {
- "type" : "node",
- "id" : "EventGateway",
- "title" : "\u4e8b\u4ef6\u5206\u652f",
- "description" : "\u4e8b\u4ef6\u5206\u652f",
- "view" : "\n\n",
- "icon" : "gateway/eventbased.png",
- "groups" : [ "\u7f51\u5173" ],
- "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "asynchronousdefinitionpackage", "exclusivedefinitionpackage", "sequencefloworderpackage" ],
- "hiddenPropertyPackages" : [ ],
- "roles" : [ "sequence_start", "GatewaysMorph", "sequence_end", "all" ]
- }, {
- "type" : "node",
- "id" : "BoundaryErrorEvent",
- "title" : "\u8fb9\u754c\u9519\u8bef\u4e8b\u4ef6",
- "description" : "\u6355\u83b7BPMN\u9519\u8bef\u8fb9\u754c\u4e8b\u4ef6",
- "view" : "\n",
- "icon" : "catching/error.png",
- "groups" : [ "\u8fb9\u754c\u4e8b\u4ef6" ],
- "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "errorrefpackage" ],
- "hiddenPropertyPackages" : [ ],
- "roles" : [ "sequence_start", "BoundaryEventsMorph", "IntermediateEventOnActivityBoundary" ]
- }, {
- "type" : "node",
- "id" : "BoundaryTimerEvent",
- "title" : "\u8fb9\u754c\u5b9a\u65f6\u5668\u4e8b\u4ef6",
- "description" : "\u5b9a\u65f6\u5668\u89e6\u53d1\u7684\u8fb9\u754c\u4e8b\u4ef6",
- "view" : "\n",
- "icon" : "catching/timer.png",
- "groups" : [ "\u8fb9\u754c\u4e8b\u4ef6" ],
- "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "timercycledefinitionpackage", "timerdatedefinitionpackage", "timerdurationdefinitionpackage", "timerenddatedefinitionpackage", "cancelactivitypackage" ],
- "hiddenPropertyPackages" : [ ],
- "roles" : [ "sequence_start", "BoundaryEventsMorph", "IntermediateEventOnActivityBoundary" ]
- }, {
- "type" : "node",
- "id" : "BoundarySignalEvent",
- "title" : "\u8fb9\u754c\u4fe1\u53f7\u4e8b\u4ef6",
- "description" : "\u4fe1\u53f7\u89e6\u53d1\u7684\u8fb9\u754c\u4e8b\u4ef6",
- "view" : "\n",
- "icon" : "catching/signal.png",
- "groups" : [ "\u8fb9\u754c\u4e8b\u4ef6" ],
- "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "signalrefpackage", "cancelactivitypackage" ],
- "hiddenPropertyPackages" : [ ],
- "roles" : [ "sequence_start", "BoundaryEventsMorph", "IntermediateEventOnActivityBoundary" ]
- }, {
- "type" : "node",
- "id" : "BoundaryMessageEvent",
- "title" : "\u8fb9\u754c\u7ebf\u6d88\u606f\u4e8b\u4ef6",
- "description" : "\u6d88\u606f\u89e6\u53d1\u7684\u8fb9\u754c\u4e8b\u4ef6",
- "view" : "\n",
- "icon" : "catching/message.png",
- "groups" : [ "\u8fb9\u754c\u4e8b\u4ef6" ],
- "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "messagerefpackage", "cancelactivitypackage" ],
- "hiddenPropertyPackages" : [ ],
- "roles" : [ "sequence_start", "BoundaryEventsMorph", "IntermediateEventOnActivityBoundary" ]
- }, {
- "type" : "node",
- "id" : "BoundaryCancelEvent",
- "title" : "\u8fb9\u754c\u53d6\u6d88\u4e8b\u4ef6",
- "description" : "\u8fb9\u754c\u53d6\u6d88\u4e8b\u4ef6",
- "view" : "\n",
- "icon" : "catching/cancel.png",
- "groups" : [ "\u8fb9\u754c\u4e8b\u4ef6" ],
- "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage" ],
- "hiddenPropertyPackages" : [ ],
- "roles" : [ "sequence_start", "BoundaryEventsMorph", "IntermediateEventOnActivityBoundary" ]
- }, {
- "type" : "node",
- "id" : "BoundaryCompensationEvent",
- "title" : "\u8fb9\u754c\u8865\u507f\u4e8b\u4ef6",
- "description" : "\u8fb9\u754c\u8865\u507f\u4e8b\u4ef6",
- "view" : "\n",
- "icon" : "catching/compensation.png",
- "groups" : [ "\u8fb9\u754c\u4e8b\u4ef6" ],
- "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage" ],
- "hiddenPropertyPackages" : [ ],
- "roles" : [ "BoundaryEventsMorph", "IntermediateEventOnActivityBoundary", "all" ]
- }, {
- "type" : "node",
- "id" : "CatchTimerEvent",
- "title" : "\u4e2d\u95f4\u5b9a\u65f6\u5668\u6355\u83b7\u4e8b\u4ef6",
- "description" : "\u5b9a\u65f6\u5668\u89e6\u53d1\u7684\u6355\u83b7\u4e8b\u4ef6",
- "view" : "\n",
- "icon" : "catching/timer.png",
- "groups" : [ "\u4e2d\u95f4\u6355\u83b7\u4e8b\u4ef6" ],
- "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "executionlistenerspackage", "timercycledefinitionpackage", "timerdatedefinitionpackage", "timerdurationdefinitionpackage" ],
- "hiddenPropertyPackages" : [ ],
- "roles" : [ "sequence_start", "sequence_end", "CatchEventsMorph", "all" ]
- }, {
- "type" : "node",
- "id" : "CatchSignalEvent",
- "title" : "\u4e2d\u95f4\u4fe1\u53f7\u6355\u83b7\u4e8b\u4ef6",
- "description" : "\u4fe1\u53f7\u89e6\u53d1\u7684\u6355\u83b7\u4e8b\u4ef6",
- "view" : "\n",
- "icon" : "catching/signal.png",
- "groups" : [ "\u4e2d\u95f4\u6355\u83b7\u4e8b\u4ef6" ],
- "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "executionlistenerspackage", "signalrefpackage" ],
- "hiddenPropertyPackages" : [ ],
- "roles" : [ "sequence_start", "sequence_end", "CatchEventsMorph", "all" ]
- }, {
- "type" : "node",
- "id" : "CatchMessageEvent",
- "title" : "\u4e2d\u95f4\u6d88\u606f\u6355\u83b7\u4e8b\u4ef6",
- "description" : "\u6d88\u606f\u89e6\u53d1\u7684\u6355\u83b7\u4e8b\u4ef6",
- "view" : "\n",
- "icon" : "catching/message.png",
- "groups" : [ "\u4e2d\u95f4\u6355\u83b7\u4e8b\u4ef6" ],
- "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "executionlistenerspackage", "messagerefpackage" ],
- "hiddenPropertyPackages" : [ ],
- "roles" : [ "sequence_start", "sequence_end", "CatchEventsMorph", "all" ]
- }, {
- "type" : "node",
- "id" : "ThrowNoneEvent",
- "title" : "\u4e2d\u95f4\u7a7a\u629b\u51fa\u4e8b\u4ef6",
- "description" : "\u4e2d\u95f4\u6ca1\u6709\u4e00\u4e2a\u5177\u4f53\u7684\u89e6\u53d1\u4e8b\u4ef6",
- "view" : "\n",
- "icon" : "throwing/none.png",
- "groups" : [ "\u4e2d\u95f4\u6355\u83b7\u4e8b\u4ef6" ],
- "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "executionlistenerspackage" ],
- "hiddenPropertyPackages" : [ ],
- "roles" : [ "ThrowEventsMorph", "sequence_start", "sequence_end", "all" ]
- }, {
- "type" : "node",
- "id" : "ThrowSignalEvent",
- "title" : "\u4e2d\u95f4\u4fe1\u53f7\u629b\u51fa\u4e8b\u4ef6",
- "description" : "\u4e2d\u95f4\u7684\u4fe1\u53f7\u89e6\u53d1\u4e8b\u4ef6",
- "view" : "\n",
- "icon" : "throwing/signal.png",
- "groups" : [ "\u4e2d\u95f4\u89e6\u53d1\u4e8b\u4ef6" ],
- "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "executionlistenerspackage", "signalrefpackage" ],
- "hiddenPropertyPackages" : [ ],
- "roles" : [ "ThrowEventsMorph", "sequence_start", "sequence_end", "all" ]
- }, {
- "type" : "node",
- "id" : "EndNoneEvent",
- "title" : "\u7ed3\u675f\u4e8b\u4ef6",
- "description" : "\u6ca1\u6709\u4e00\u4e2a\u5177\u4f53\u7684\u89e6\u53d1\u7ed3\u675f\u4e8b\u4ef6",
- "view" : "\n",
- "icon" : "endevent/none.png",
- "groups" : [ "\u7ed3\u675f\u4e8b\u4ef6" ],
- "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "executionlistenerspackage" ],
- "hiddenPropertyPackages" : [ ],
- "roles" : [ "EndEventsMorph", "sequence_end", "all" ]
- }, {
- "type" : "node",
- "id" : "EndErrorEvent",
- "title" : "\u7ed3\u675f\u9519\u8bef\u4e8b\u4ef6",
- "description" : "\u629b\u51fa\u4e00\u4e2a\u9519\u8bef\u7ed3\u675f\u4e8b\u4ef6",
- "view" : "\n",
- "icon" : "endevent/error.png",
- "groups" : [ "\u7ed3\u675f\u4e8b\u4ef6" ],
- "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "executionlistenerspackage", "errorrefpackage" ],
- "hiddenPropertyPackages" : [ ],
- "roles" : [ "EndEventsMorph", "sequence_end", "all" ]
- }, {
- "type" : "node",
- "id" : "EndCancelEvent",
- "title" : "\u7ed3\u675f\u540e\u53d6\u6d88\u4e8b\u4ef6",
- "description" : "\u7ed3\u675f\u540e\u53d6\u6d88\u4e8b\u4ef6",
- "view" : "\n",
- "icon" : "endevent/cancel.png",
- "groups" : [ "\u7ed3\u675f\u4e8b\u4ef6" ],
- "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "executionlistenerspackage" ],
- "hiddenPropertyPackages" : [ ],
- "roles" : [ "EndEventsMorph", "sequence_end", "all" ]
- }, {
- "type" : "node",
- "id" : "EndTerminateEvent",
- "title" : "\u7ed3\u675f\u7ec8\u6b62\u4e8b\u4ef6",
- "description" : "\u7ed3\u675f\u7ec8\u6b62\u4e8b\u4ef6",
- "view" : "\n",
- "icon" : "endevent/terminate.png",
- "groups" : [ "\u7ed3\u675f\u4e8b\u4ef6" ],
- "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "executionlistenerspackage", "terminateAllpackage" ],
- "hiddenPropertyPackages" : [ ],
- "roles" : [ "EndEventsMorph", "sequence_end", "all" ]
- }, {
- "type" : "node",
- "id" : "Pool",
- "title" : "\u6d41\u7a0b\u6c60",
- "description" : "\u6d41\u7a0b\u5b9a\u4e49\u6c60",
- "view" : "\n",
- "icon" : "swimlane/pool.png",
- "groups" : [ "泳道" ],
- "layout" : [ {
- "type" : "layout.bpmn2_0.pool"
- } ],
- "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "process_idpackage", "isexecutablepackage" ],
- "hiddenPropertyPackages" : [ ],
- "roles" : [ "canContainArtifacts", "all" ]
- }, {
- "type" : "node",
- "id" : "Lane",
- "title" : "通道",
- "description" : "建立流程定义的通道",
- "view" : "\n",
- "icon" : "swimlane/lane.png",
- "groups" : [ "泳道" ],
- "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage" ],
- "hiddenPropertyPackages" : [ ],
- "roles" : [ "PoolChild", "canContainArtifacts", "all" ]
- }, {
- "type" : "edge",
- "id" : "SequenceFlow",
- "title" : "\u987a\u5e8f\u6d41",
- "description" : "\u987a\u5e8f\u6d41\u5b9a\u4e49\u6d3b\u52a8\u7684\u6267\u884c\u987a\u5e8f.",
- "view" : "\r\n",
- "icon" : "connector/sequenceflow.png",
- "groups" : [ "\u8fde\u63a5\u5bf9\u8c61" ],
- "layout" : [ {
- "type" : "layout.bpmn2_0.sequenceflow"
- } ],
- "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "conditionsequenceflowpackage", "executionlistenerspackage", "defaultflowpackage", "skipexpressionpackage","sequenceflowtextxpackage" ],
- "hiddenPropertyPackages" : [ ],
- "roles" : [ "ConnectingObjectsMorph", "all" ]
- }, {
- "type" : "edge",
- "id" : "MessageFlow",
- "title" : "\u6d88\u606f\u6d41",
- "description" : "\u8fde\u63a5\u4e0d\u540c\u6d41\u7a0b\u6c60\u7684\u6d88\u606f\u6d41.",
- "view" : "\r\n",
- "icon" : "connector/messageflow.png",
- "groups" : [ "\u8fde\u63a5\u5bf9\u8c61" ],
- "layout" : [ {
- "type" : "layout.bpmn2_0.sequenceflow"
- } ],
- "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage" ],
- "hiddenPropertyPackages" : [ ],
- "roles" : [ "ConnectingObjectsMorph", "all" ]
- }, {
- "type" : "edge",
- "id" : "Association",
- "title" : "\u8054\u7cfb",
- "description" : "\u8054\u7cfb\u6587\u672c\u6ce8\u91ca\u4e0e\u5bf9\u8c61.",
- "view" : "\r\n",
- "icon" : "connector/association.undirected.png",
- "groups" : [ "\u8fde\u63a5\u5bf9\u8c61" ],
- "layout" : [ {
- "type" : "layout.bpmn2_0.sequenceflow"
- } ],
- "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage" ],
- "hiddenPropertyPackages" : [ ],
- "roles" : [ "ConnectingObjectsMorph", "all" ]
- }, {
- "type" : "edge",
- "id" : "DataAssociation",
- "title" : "\u6570\u636e\u8054\u7cfb",
- "description" : "\u8054\u7cfb\u5e26\u6d3b\u52a8\u7684\u5bf9\u8c61.",
- "view" : "\r\n",
- "icon" : "connector/association.unidirectional.png",
- "groups" : [ "\u8fde\u63a5\u5bf9\u8c61" ],
- "layout" : [ {
- "type" : "layout.bpmn2_0.sequenceflow"
- } ],
- "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage" ],
- "hiddenPropertyPackages" : [ ],
- "roles" : [ "ConnectingObjectsMorph", "all" ]
- }, {
- "type" : "node",
- "id" : "TextAnnotation",
- "title" : "\u6587\u672c\u6ce8\u91ca",
- "description" : "\u8bf4\u660e\u6587\u5b57\u6807\u6ce8\u5143\u7d20.",
- "view" : "\n",
- "icon" : "artifact/text.annotation.png",
- "groups" : [ "\u6784\u4ef6" ],
- "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "textpackage" ],
- "hiddenPropertyPackages" : [ ],
- "roles" : [ "all" ]
- }, {
- "type" : "node",
- "id" : "DataStore",
- "title" : "\u6570\u636e\u5b58\u50a8",
- "description" : "\u6570\u636e\u5b58\u50a8\u7684\u5f15\u7528.",
- "view" : "\r\n\r\n",
- "icon" : "dataobject/data.store.png",
- "groups" : [ "\u6784\u4ef6" ],
- "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage" ],
- "hiddenPropertyPackages" : [ ],
- "roles" : [ "all" ]
- }, {
- "type" : "node",
- "id" : "AdhocSubProcess",
- "title" : "特别子流程",
- "description" : "一个特别子过程",
- "view" : "\n",
- "icon" : "activity/adhoc.subprocess.png",
- "groups" : [ "子流程" ],
- "propertyPackages" : [ "overrideidpackage", "namepackage", "documentationpackage", "completionconditionpackage", "orderingpackage", "cancelremaininginstancespackage" ],
- "hiddenPropertyPackages" : [ ],
- "roles" : [ "Activity", "sequence_start", "sequence_end", "all" ]
- } ],
- "rules" : {
- "cardinalityRules" : [ {
- "role" : "Startevents_all",
- "incomingEdges" : [ {
- "role" : "SequenceFlow",
- "maximum" : 0
- } ]
- }, {
- "role" : "Endevents_all",
- "outgoingEdges" : [ {
- "role" : "SequenceFlow",
- "maximum" : 0
- } ]
- } ],
- "connectionRules" : [ {
- "role" : "SequenceFlow",
- "connects" : [ {
- "from" : "sequence_start",
- "to" : [ "sequence_end" ]
- } ]
- }, {
- "role" : "Association",
- "connects" : [ {
- "from" : "sequence_start",
- "to" : [ "TextAnnotation" ]
- }, {
- "from" : "sequence_end",
- "to" : [ "TextAnnotation" ]
- }, {
- "from" : "TextAnnotation",
- "to" : [ "sequence_end" ]
- }, {
- "from" : "BoundaryCompensationEvent",
- "to" : [ "sequence_end" ]
- }, {
- "from" : "TextAnnotation",
- "to" : [ "sequence_start" ]
- }, {
- "from" : "BoundaryCompensationEvent",
- "to" : [ "sequence_start" ]
- } ]
- }, {
- "role" : "DataAssociation",
- "connects" : [ {
- "from" : "sequence_start",
- "to" : [ "DataStore" ]
- }, {
- "from" : "sequence_end",
- "to" : [ "DataStore" ]
- }, {
- "from" : "DataStore",
- "to" : [ "sequence_end" ]
- }, {
- "from" : "DataStore",
- "to" : [ "sequence_start" ]
- } ]
- }, {
- "role" : "IntermediateEventOnActivityBoundary",
- "connects" : [ {
- "from" : "Activity",
- "to" : [ "IntermediateEventOnActivityBoundary" ]
- } ]
- } ],
- "containmentRules" : [ {
- "role" : "BPMNDiagram",
- "contains" : [ "all" ]
- }, {
- "role" : "SubProcess",
- "contains" : [ "sequence_start", "sequence_end", "from_task_event", "to_task_event", "EventSubProcess", "TextAnnotation", "DataStore" ]
- }, {
- "role" : "AdhocSubProcess",
- "contains" : [ "sequence_start", "sequence_end", "from_task_event", "to_task_event", "TextAnnotation", "DataStore" ]
- }, {
- "role" : "EventSubProcess",
- "contains" : [ "sequence_start", "sequence_end", "from_task_event", "to_task_event", "TextAnnotation", "DataStore" ]
- }, {
- "role" : "Pool",
- "contains" : [ "Lane" ]
- }, {
- "role" : "Lane",
- "contains" : [ "sequence_start", "sequence_end", "EventSubProcess", "TextAnnotation", "DataStore" ]
- } ],
- "morphingRules" : [ {
- "role" : "ActivitiesMorph",
- "baseMorphs" : [ "UserTask" ],
- "preserveBounds" : true
- }, {
- "role" : "GatewaysMorph",
- "baseMorphs" : [ "ExclusiveGateway" ]
- }, {
- "role" : "StartEventsMorph",
- "baseMorphs" : [ "StartNoneEvent" ]
- }, {
- "role" : "EndEventsMorph",
- "baseMorphs" : [ "StartNoneEvent" ]
- }, {
- "role" : "CatchEventsMorph",
- "baseMorphs" : [ "CatchTimerEvent" ]
- }, {
- "role" : "ThrowEventsMorph",
- "baseMorphs" : [ "ThrowNoneEvent" ]
- }, {
- "role" : "BoundaryEventsMorph",
- "baseMorphs" : [ "ThrowNoneEvent" ]
- }, {
- "role" : "BoundaryCompensationEvent",
- "baseMorphs" : [ "BoundaryCompensationEvent" ]
- }, {
- "role" : "TextAnnotation",
- "baseMorphs" : [ "TextAnnotation" ]
- }, {
- "role" : "DataStore",
- "baseMorphs" : [ "DataStore" ]
- } ]
- }
-}
diff --git a/ruoyi-modules/ruoyi-workflow/pom.xml b/ruoyi-modules/ruoyi-workflow/pom.xml
index a59374274..f0391e358 100644
--- a/ruoyi-modules/ruoyi-workflow/pom.xml
+++ b/ruoyi-modules/ruoyi-workflow/pom.xml
@@ -53,6 +53,19 @@
6.8.0
+
+
+ org.apache.xmlgraphics
+ batik-all
+ 1.10
+
+
+ xalan
+ xalan
+
+
+
+
org.dromara
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActModelController.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActModelController.java
index cc02e1147..5cfaaf9b8 100644
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActModelController.java
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActModelController.java
@@ -1,36 +1,26 @@
package org.dromara.workflow.controller;
-import cn.hutool.core.convert.Convert;
-import cn.hutool.core.io.resource.ResourceUtil;
-import com.fasterxml.jackson.databind.node.ObjectNode;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotEmpty;
import lombok.RequiredArgsConstructor;
-import org.apache.commons.io.IOUtils;
import org.dromara.common.core.domain.R;
-import org.dromara.common.core.domain.model.LoginUser;
import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
-import org.dromara.common.json.utils.JsonUtils;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.mybatis.core.page.TableDataInfo;
-import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.web.core.BaseController;
import org.dromara.workflow.domain.bo.ModelBo;
-import org.dromara.workflow.domain.vo.AccountVo;
-import org.dromara.workflow.domain.vo.ResultListDataRepresentation;
+import org.dromara.workflow.domain.vo.ModelVo;
import org.dromara.workflow.service.IActModelService;
import org.flowable.engine.RepositoryService;
import org.flowable.engine.repository.Model;
import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.MultiValueMap;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
-import java.io.InputStream;
-import java.nio.charset.StandardCharsets;
import java.util.Arrays;
/**
@@ -59,20 +49,6 @@ public class ActModelController extends BaseController {
return actModelService.page(modelBo);
}
- /**
- * 设计器登录信息
- */
- @GetMapping("/rest/account")
- public String getAccount() {
- AccountVo accountVo = new AccountVo();
- LoginUser loginUser = LoginHelper.getLoginUser();
- accountVo.setId(Convert.toStr(loginUser.getUserId()));
- accountVo.setFirstName("");
- accountVo.setLastName(loginUser.getUsername());
- accountVo.setFullName(loginUser.getUsername());
- return JsonUtils.toJsonString(accountVo);
- }
-
/**
* 新增模型
*
@@ -80,7 +56,7 @@ public class ActModelController extends BaseController {
*/
@Log(title = "模型管理", businessType = BusinessType.INSERT)
@RepeatSubmit()
- @PostMapping("/rest/models")
+ @PostMapping("/save")
public R saveNewModel(@Validated(AddGroup.class) @RequestBody ModelBo modelBo) {
return toAjax(actModelService.saveNewModel(modelBo));
}
@@ -88,25 +64,35 @@ public class ActModelController extends BaseController {
/**
* 查询模型
*
- * @param modelId 模型id
+ * @param id 模型id
*/
- @GetMapping("/rest/models/{modelId}/editor/json")
- public ObjectNode getModelInfo(@NotBlank(message = "模型id不能为空") @PathVariable String modelId) {
- return actModelService.getModelInfo(modelId);
+ @GetMapping("/getInfo/{id}")
+ public R getInfo(@NotBlank(message = "模型id不能为空") @PathVariable String id) {
+ return R.ok(actModelService.getInfo(id));
}
-
/**
- * 编辑模型
+ * 修改模型信息
*
- * @param modelId 模型id
- * @param values 模型数据
+ * @param modelBo 模型数据
*/
@Log(title = "模型管理", businessType = BusinessType.UPDATE)
@RepeatSubmit()
- @PostMapping(value = "/rest/models/{modelId}/editor/json")
- public R editModel(@PathVariable String modelId, @RequestParam MultiValueMap values) {
- return toAjax(actModelService.editModel(modelId, values));
+ @PostMapping(value = "/update")
+ public R update(@RequestBody ModelBo modelBo) {
+ return toAjax(actModelService.update(modelBo));
+ }
+
+ /**
+ * 编辑XMl模型
+ *
+ * @param modelBo 模型数据
+ */
+ @Log(title = "模型管理", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ @PostMapping(value = "/editModelXml")
+ public R editModel(@Validated(EditGroup.class) @RequestBody ModelBo modelBo) {
+ return toAjax(actModelService.editModelXml(modelBo));
}
/**
@@ -146,36 +132,4 @@ public class ActModelController extends BaseController {
HttpServletResponse response) {
actModelService.exportZip(modelId, response);
}
-
- /**
- * 查询用户
- *
- * @param filter 参数
- */
- @GetMapping(value = "/rest/editor-users")
- public ResultListDataRepresentation editorUsers(@RequestParam(value = "filter", required = false) String filter) {
- return actModelService.getUsers(filter);
- }
-
- /**
- * 查询用户组
- *
- * @param filter 参数
- */
- @GetMapping(value = "/rest/editor-groups")
- public ResultListDataRepresentation editorGroups(@RequestParam(required = false, value = "filter") String filter) {
- return actModelService.getGroups(filter);
- }
-
- /**
- * 解析翻译模型设计器内容
- */
- @GetMapping(value = "/rest/stencil-sets/editor")
- public String getStencilset() {
- try (InputStream inputStream = ResourceUtil.getStream("static/stencilset.json")) {
- return IOUtils.toString(inputStream, StandardCharsets.UTF_8);
- } catch (Exception e) {
- throw new SecurityException("Error while loading stencil set", e);
- }
- }
}
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/ModelBo.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/ModelBo.java
index 152f65445..12efd87a8 100644
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/ModelBo.java
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/ModelBo.java
@@ -5,6 +5,7 @@ import jakarta.validation.constraints.Pattern;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
import org.dromara.workflow.common.PageEntity;
import org.dromara.workflow.common.constant.FlowConstant;
@@ -23,6 +24,12 @@ public class ModelBo extends PageEntity implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
+ /**
+ * 模型id
+ */
+ @NotBlank(message = "模型ID不能为空", groups = {EditGroup.class})
+ private String id;
+
/**
* 模型名称
*/
@@ -42,6 +49,18 @@ public class ModelBo extends PageEntity implements Serializable {
@NotBlank(message = "模型分类不能为空", groups = {AddGroup.class})
private String categoryCode;
+ /**
+ * 模型XML
+ */
+ @NotBlank(message = "模型XML不能为空", groups = {AddGroup.class})
+ private String xml;
+
+ /**
+ * 模型SVG图片
+ */
+ @NotBlank(message = "模型SVG不能为空", groups = {EditGroup.class})
+ private String svg;
+
/**
* 备注
*/
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/AccountVo.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/AccountVo.java
deleted file mode 100644
index 825f7c486..000000000
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/AccountVo.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package org.dromara.workflow.domain.vo;
-
-import lombok.Data;
-
-import java.util.List;
-
-/**
- * 参考官方提供的响应数据
- *
- * @author may
- */
-@Data
-public class AccountVo {
- private String id;
- private String firstName;
- private String lastName;
- private String email;
- private String fullName;
- private List groups;
- private List privileges;
-}
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/ModelVo.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/ModelVo.java
new file mode 100644
index 000000000..b2ce81108
--- /dev/null
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/ModelVo.java
@@ -0,0 +1,48 @@
+package org.dromara.workflow.domain.vo;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 模型视图对象
+ *
+ * @author may
+ */
+@Data
+public class ModelVo implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 模型id
+ */
+ private String id;
+
+ /**
+ * 模型名称
+ */
+ private String name;
+
+ /**
+ * 模型标识key
+ */
+ private String key;
+
+ /**
+ * 模型分类
+ */
+ private String categoryCode;
+
+ /**
+ * 模型XML
+ */
+ private String xml;
+
+ /**
+ * 备注
+ */
+ private String description;
+}
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/ResultListDataRepresentation.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/ResultListDataRepresentation.java
deleted file mode 100644
index 907d4dadd..000000000
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/ResultListDataRepresentation.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/* Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.dromara.workflow.domain.vo;
-
-import lombok.Data;
-
-import java.util.List;
-
-/**
- * @author Tijs Rademakers
- */
-@Data
-public class ResultListDataRepresentation {
-
- protected Integer size;
- protected Long total;
- protected Integer start;
- protected List> data;
-
- public ResultListDataRepresentation(List> data) {
- this.data = data;
- if (data != null) {
- size = data.size();
- total = (long) data.size();
- start = 0;
- }
- }
-
-}
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/UserRepresentation.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/UserRepresentation.java
deleted file mode 100644
index d990a920d..000000000
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/UserRepresentation.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/* Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.dromara.workflow.domain.vo;
-
-import lombok.Data;
-
-/**
- * @author Joram Barrez
- */
-@Data
-public class UserRepresentation {
-
- protected String id;
- protected String firstName;
- protected String lastName;
- protected String email;
- protected String fullName;
- protected String tenantId;
-
-}
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActModelService.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActModelService.java
index 86820bdef..c7f6c1858 100644
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActModelService.java
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActModelService.java
@@ -1,12 +1,11 @@
package org.dromara.workflow.service;
-import com.fasterxml.jackson.databind.node.ObjectNode;
import jakarta.servlet.http.HttpServletResponse;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.workflow.domain.bo.ModelBo;
-import org.dromara.workflow.domain.vo.ResultListDataRepresentation;
+import org.dromara.workflow.domain.vo.ModelVo;
import org.flowable.engine.repository.Model;
-import org.springframework.util.MultiValueMap;
+
/**
* 模型管理 服务层
@@ -36,16 +35,23 @@ public interface IActModelService {
* @param modelId 模型id
* @return 模型数据
*/
- ObjectNode getModelInfo(String modelId);
+ ModelVo getInfo(String modelId);
/**
- * 编辑模型
+ * 修改模型信息
*
- * @param modelId 模型id
- * @param values 模型数据
+ * @param modelBo 模型数据
* @return 结果
*/
- boolean editModel(String modelId, MultiValueMap values);
+ boolean update(ModelBo modelBo);
+
+ /**
+ * 编辑模型XML
+ *
+ * @param modelBo 模型数据
+ * @return 结果
+ */
+ boolean editModelXml(ModelBo modelBo);
/**
* 模型部署
@@ -62,20 +68,4 @@ public interface IActModelService {
* @param response 相应
*/
void exportZip(String modelId, HttpServletResponse response);
-
- /**
- * 查询用户
- *
- * @param filter 参数
- * @return 结果
- */
- ResultListDataRepresentation getUsers(String filter);
-
- /**
- * 查询用户组
- *
- * @param filter 参数
- * @return 结果
- */
- ResultListDataRepresentation getGroups(String filter);
}
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActModelServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActModelServiceImpl.java
index 290a0ebfe..44adc4248 100644
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActModelServiceImpl.java
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActModelServiceImpl.java
@@ -7,34 +7,24 @@ import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.util.ZipUtil;
import cn.hutool.json.JSONUtil;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ObjectNode;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
+import org.apache.batik.transcoder.TranscoderInput;
+import org.apache.batik.transcoder.TranscoderOutput;
+import org.apache.batik.transcoder.image.PNGTranscoder;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.dromara.common.core.exception.ServiceException;
-import org.dromara.common.core.utils.StreamUtils;
-import org.dromara.common.json.utils.JsonUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.tenant.helper.TenantHelper;
-import org.dromara.system.domain.SysRole;
-import org.dromara.system.domain.SysUser;
import org.dromara.system.mapper.SysRoleMapper;
import org.dromara.system.mapper.SysUserMapper;
import org.dromara.workflow.common.constant.FlowConstant;
import org.dromara.workflow.domain.bo.ModelBo;
-import org.dromara.workflow.domain.vo.GroupRepresentation;
-import org.dromara.workflow.domain.vo.ResultListDataRepresentation;
-import org.dromara.workflow.domain.vo.UserRepresentation;
+import org.dromara.workflow.domain.vo.ModelVo;
import org.dromara.workflow.service.IActModelService;
-import org.dromara.workflow.utils.WorkflowUtils;
+import org.dromara.workflow.utils.ModelUtils;
import org.flowable.bpmn.model.BpmnModel;
-import org.flowable.editor.constants.ModelDataJsonConstants;
-import org.flowable.editor.language.json.converter.BpmnJsonConverter;
import org.flowable.engine.RepositoryService;
import org.flowable.engine.repository.Deployment;
import org.flowable.engine.repository.Model;
@@ -43,21 +33,18 @@ import org.flowable.engine.repository.ProcessDefinition;
import org.flowable.validation.ValidationError;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.MultiValueMap;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
import java.io.IOException;
+import java.io.InputStream;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
import java.util.stream.Collectors;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
-import static org.dromara.workflow.common.constant.FlowConstant.NAMESPACE;
-import static org.flowable.editor.constants.ModelDataJsonConstants.*;
-
/**
* 模型管理 服务层实现
*
@@ -95,16 +82,6 @@ public class ActModelServiceImpl implements IActModelService {
query.orderByCreateTime().desc();
// 分页查询
List modelList = query.listPage(modelBo.getPageNum(), modelBo.getPageSize());
- if (CollUtil.isNotEmpty(modelList)) {
- modelList.parallelStream().forEach(e -> {
- boolean isNull = JSONUtil.isNull(JSONUtil.parseObj(e.getMetaInfo()).get(ModelDataJsonConstants.MODEL_DESCRIPTION));
- if (!isNull) {
- e.setMetaInfo((String) JSONUtil.parseObj(e.getMetaInfo()).get(ModelDataJsonConstants.MODEL_DESCRIPTION));
- } else {
- e.setMetaInfo(StrUtil.EMPTY);
- }
- });
- }
// 总记录数
long total = query.count();
return new TableDataInfo<>(modelList, total);
@@ -124,38 +101,22 @@ public class ActModelServiceImpl implements IActModelService {
String key = modelBo.getKey();
String name = modelBo.getName();
String description = modelBo.getDescription();
+ String categoryCode = modelBo.getCategoryCode();
+ String xml = modelBo.getXml();
Model checkModel = repositoryService.createModelQuery().modelKey(key).modelTenantId(TenantHelper.getTenantId()).singleResult();
if (ObjectUtil.isNotNull(checkModel)) {
throw new ServiceException("模型key已存在!");
}
- // 1. 初始空的模型
+ //初始空的模型
Model model = repositoryService.newModel();
model.setKey(key);
model.setName(name);
- model.setCategory(modelBo.getCategoryCode());
model.setVersion(version);
- model.setTenantId(TenantHelper.getTenantId());
- ObjectMapper objectMapper = JsonUtils.getObjectMapper();
- // 封装模型json对象
- ObjectNode objectNode = JsonUtils.getObjectMapper().createObjectNode();
- objectNode.put(MODEL_NAME, name);
- objectNode.put(MODEL_REVISION, version);
- objectNode.put(MODEL_DESCRIPTION, description);
- model.setMetaInfo(objectNode.toString());
- // 保存初始化的模型基本信息数据
+ model.setCategory(categoryCode);
+ model.setMetaInfo(description);
+ //保存初始化的模型基本信息数据
repositoryService.saveModel(model);
- // 封装模型对象基础数据json串
- ObjectNode editorNode = objectMapper.createObjectNode();
- ObjectNode stencilSetNode = objectMapper.createObjectNode();
- stencilSetNode.put("namespace", NAMESPACE);
- editorNode.replace("stencilset", stencilSetNode);
- // 标识key
- ObjectNode propertiesNode = objectMapper.createObjectNode();
- propertiesNode.put("process_id", key);
- propertiesNode.put("name", name);
- propertiesNode.put("description", description);
- editorNode.replace("properties", propertiesNode);
- repositoryService.addModelEditorSource(model.getId(), editorNode.toString().getBytes(StandardCharsets.UTF_8));
+ repositoryService.addModelEditorSource(model.getId(), StrUtil.utf8Bytes(xml));
return true;
} catch (Exception e) {
e.printStackTrace();
@@ -166,93 +127,97 @@ public class ActModelServiceImpl implements IActModelService {
/**
* 查询模型
*
- * @param modelId 模型id
+ * @param id 模型id
* @return 模型数据
*/
@Override
- public ObjectNode getModelInfo(String modelId) {
- ObjectNode modelNode = null;
- Model model = repositoryService.createModelQuery().modelId(modelId).modelTenantId(TenantHelper.getTenantId()).singleResult();
- ObjectMapper objectMapper = JsonUtils.getObjectMapper();
+ public ModelVo getInfo(String id) {
+ ModelVo modelVo = new ModelVo();
+ Model model = repositoryService.getModel(id);
if (model != null) {
try {
- if (StringUtils.isNotEmpty(model.getMetaInfo())) {
- modelNode = (ObjectNode) objectMapper.readTree(model.getMetaInfo());
- } else {
- modelNode = objectMapper.createObjectNode();
- modelNode.put(MODEL_NAME, model.getName());
- }
- modelNode.put(MODEL_ID, model.getId());
- modelNode.put("key", model.getKey());
- Integer version = model.getVersion();
- if (version > 0) {
- byte[] modelEditorSource = repositoryService.getModelEditorSource(model.getId());
- BpmnModel bpmnModel = WorkflowUtils.xmlToBpmnModel(modelEditorSource);
- BpmnJsonConverter bpmnJsonConverter = new BpmnJsonConverter();
- ObjectNode jsonNodes = bpmnJsonConverter.convertToJson(bpmnModel);
- modelNode.set("model", jsonNodes);
- } else {
- ObjectNode editorJsonNode = (ObjectNode) objectMapper.readTree(
- new String(repositoryService.getModelEditorSource(model.getId()), StandardCharsets.UTF_8));
- modelNode.set("model", editorJsonNode);
- }
-
+ byte[] modelEditorSource = repositoryService.getModelEditorSource(model.getId());
+ modelVo.setXml(StrUtil.utf8Str(modelEditorSource));
+ modelVo.setId(model.getId());
+ modelVo.setKey(model.getKey());
+ modelVo.setName(model.getName());
+ modelVo.setCategoryCode(model.getCategory());
+ modelVo.setDescription(model.getMetaInfo());
+ return modelVo;
} catch (Exception e) {
- e.printStackTrace();
+ throw new ServiceException(e.getMessage());
}
}
- return modelNode;
+ return modelVo;
}
/**
- * 编辑模型
+ * 修改模型信息
*
- * @param modelId 模型id
- * @param values 模型数据
+ * @param modelBo 模型数据
+ * @return 结果
+ */
+ @Override
+ public boolean update(ModelBo modelBo) {
+ try {
+ Model model = repositoryService.getModel(modelBo.getId());
+ List list = repositoryService.createModelQuery().modelTenantId(TenantHelper.getTenantId()).modelKey(modelBo.getKey()).list();
+ list.stream().filter(e -> !e.getId().equals(model.getId())).findFirst().ifPresent(e -> {
+ throw new ServiceException("模型KEY已存在!");
+ });
+ model.setKey(modelBo.getKey());
+ model.setName(modelBo.getName());
+ model.setCategory(modelBo.getCategoryCode());
+ model.setMetaInfo(modelBo.getDescription());
+ repositoryService.saveModel(model);
+ } catch (Exception e) {
+ throw new ServiceException(e.getMessage());
+ }
+ return true;
+ }
+
+ /**
+ * 编辑模型XML
+ *
+ * @param modelBo 模型数据
* @return 结果
*/
@Override
@Transactional(rollbackFor = Exception.class)
- public boolean editModel(String modelId, MultiValueMap values) {
+ public boolean editModelXml(ModelBo modelBo) {
try {
- Model model = repositoryService.createModelQuery().modelId(modelId).modelTenantId(TenantHelper.getTenantId()).singleResult();
- ObjectMapper objectMapper = JsonUtils.getObjectMapper();
- ObjectNode modelJson = (ObjectNode) objectMapper.readTree(model.getMetaInfo());
-
- modelJson.put(MODEL_NAME, values.getFirst("name"));
- modelJson.put(MODEL_DESCRIPTION, values.getFirst("description"));
- modelJson.put(MODEL_REVISION, model.getVersion() + 1);
- model.setMetaInfo(modelJson.toString());
- model.setName(values.getFirst("name"));
- // 每次保存把版本更新+1
- model.setVersion(model.getVersion() + 1);
- // 获取唯一标识key
- String key = values.getFirst("key");
+ String xml = modelBo.getXml();
+ String svg = modelBo.getSvg();
+ String modelId = modelBo.getId();
+ String key = modelBo.getKey();
+ String name = modelBo.getName();
+ BpmnModel bpmnModel = ModelUtils.xmlToBpmnModel(xml);
+ ModelUtils.checkBpmnModel(bpmnModel);
+ Model model = repositoryService.getModel(modelId);
+ List list = repositoryService.createModelQuery().modelTenantId(TenantHelper.getTenantId()).modelKey(key).list();
+ list.stream().filter(e -> !e.getId().equals(model.getId())).findFirst().ifPresent(e -> {
+ throw new ServiceException("模型KEY已存在!");
+ });
// 校验key命名规范
if (!Validator.isMatchRegex(FlowConstant.MODEL_KEY_PATTERN, key)) {
- throw new ServiceException("模型标识key只能字符或者下划线开头!");
+ throw new ServiceException("模型标识KEY只能字符或者下划线开头!");
}
- List list = repositoryService.createModelQuery().modelKey(key).modelTenantId(TenantHelper.getTenantId()).list();
- list.stream().filter(e -> !e.getId().equals(model.getId())).findFirst().ifPresent(e -> {
- throw new ServiceException("模型标识key已存在!");
- });
model.setKey(key);
+ model.setName(name);
+ model.setVersion(model.getVersion() + 1);
repositoryService.saveModel(model);
- JsonNode jsonNode = objectMapper.readTree(values.getFirst("json_xml"));
- // 校验流程标识
- String processId = jsonNode.get("properties").get("process_id").textValue();
- if (StringUtils.isBlank(processId)) {
- throw new ServiceException("流程标识不能为空!");
- }
- if (!Validator.isMatchRegex(FlowConstant.MODEL_KEY_PATTERN, processId)) {
- throw new ServiceException("流程标识只能字符或者下划线开头!");
- }
+ repositoryService.addModelEditorSource(model.getId(), StrUtil.utf8Bytes(xml));
+ // 转换图片
+ InputStream svgStream = new ByteArrayInputStream(StrUtil.utf8Bytes(svg));
+ TranscoderInput input = new TranscoderInput(svgStream);
- byte[] xmlBytes = WorkflowUtils.bpmnJsonToXmlBytes(Objects.requireNonNull(JsonUtils.toJsonString(jsonNode)).getBytes(StandardCharsets.UTF_8));
- if (ArrayUtil.isEmpty(xmlBytes)) {
- throw new ServiceException("模型不能为空!");
- }
- repositoryService.addModelEditorSource(model.getId(), xmlBytes);
+ PNGTranscoder transcoder = new PNGTranscoder();
+ ByteArrayOutputStream outStream = new ByteArrayOutputStream();
+ TranscoderOutput output = new TranscoderOutput(outStream);
+
+ transcoder.transcode(input, output);
+ final byte[] result = outStream.toByteArray();
+ repositoryService.addModelEditorSourceExtra(model.getId(), result);
return true;
} catch (Exception e) {
e.printStackTrace();
@@ -276,14 +241,14 @@ public class ActModelServiceImpl implements IActModelService {
throw new ServiceException("模型数据为空,请先设计流程定义模型,再进行部署!");
}
if (JSONUtil.isTypeJSON(IOUtils.toString(xmlBytes, StandardCharsets.UTF_8.toString()))) {
- byte[] bytes = WorkflowUtils.bpmnJsonToXmlBytes(xmlBytes);
+ byte[] bytes = ModelUtils.bpmnJsonToXmlBytes(xmlBytes);
if (ArrayUtil.isEmpty(bytes)) {
throw new ServiceException("模型不能为空,请至少设计一条主线流程!");
}
}
- BpmnModel bpmnModel = WorkflowUtils.xmlToBpmnModel(xmlBytes);
+ BpmnModel bpmnModel = ModelUtils.xmlToBpmnModel(xmlBytes);
// 校验模型
- WorkflowUtils.checkBpmnModel(bpmnModel);
+ ModelUtils.checkBpmnModel(bpmnModel);
List validationErrors = repositoryService.validateProcess(bpmnModel);
if (CollUtil.isNotEmpty(validationErrors)) {
String errorMsg = validationErrors.stream().map(ValidationError::getProblem).distinct().collect(Collectors.joining(","));
@@ -337,7 +302,7 @@ public class ActModelServiceImpl implements IActModelService {
Model model = repositoryService.getModel(modelId);
byte[] xmlBytes = repositoryService.getModelEditorSource(modelId);
if (ObjectUtil.isNotNull(model)) {
- if (JSONUtil.isTypeJSON(IOUtils.toString(xmlBytes, StandardCharsets.UTF_8.toString())) && ArrayUtil.isEmpty(WorkflowUtils.bpmnJsonToXmlBytes(xmlBytes))) {
+ if (JSONUtil.isTypeJSON(IOUtils.toString(xmlBytes, StandardCharsets.UTF_8.toString())) && ArrayUtil.isEmpty(ModelUtils.bpmnJsonToXmlBytes(xmlBytes))) {
zipName = "模型不能为空,请至少设计一条主线流程!";
zos.putNextEntry(new ZipEntry(zipName + ".txt"));
zos.write(zipName.getBytes(StandardCharsets.UTF_8));
@@ -371,49 +336,4 @@ public class ActModelServiceImpl implements IActModelService {
}
}
}
-
- /**
- * 查询用户
- *
- * @param filter 参数
- */
- @Override
- public ResultListDataRepresentation getUsers(String filter) {
-
- LambdaQueryWrapper wrapper = Wrappers.lambdaQuery();
- wrapper.like(StringUtils.isNotBlank(filter), SysUser::getNickName, filter);
- List sysUsers = sysUserMapper.selectList(wrapper);
- List userRepresentations = new ArrayList<>();
- for (SysUser sysUser : sysUsers) {
- UserRepresentation userRepresentation = new UserRepresentation();
- userRepresentation.setFullName(sysUser.getNickName());
- userRepresentation.setLastName(sysUser.getNickName());
- userRepresentation.setTenantId(sysUser.getTenantId());
- userRepresentation.setEmail(sysUser.getEmail());
- userRepresentation.setId(sysUser.getUserId().toString());
- userRepresentations.add(userRepresentation);
- }
- return new ResultListDataRepresentation(userRepresentations);
- }
-
- /**
- * 查询用户组
- *
- * @param filter 参数
- */
- @Override
- public ResultListDataRepresentation getGroups(String filter) {
-
- LambdaQueryWrapper wrapper = Wrappers.lambdaQuery();
- wrapper.like(StringUtils.isNotBlank(filter), SysRole::getRoleName, filter);
- List sysRoles = sysRoleMapper.selectList(wrapper);
- List result = StreamUtils.toList(sysRoles, sysRole -> {
- GroupRepresentation groupRepresentation = new GroupRepresentation();
- groupRepresentation.setId(sysRole.getRoleId().toString());
- groupRepresentation.setName(sysRole.getRoleName());
- groupRepresentation.setType(sysRole.getRoleKey());
- return groupRepresentation;
- });
- return new ResultListDataRepresentation(result);
- }
}
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/ModelUtils.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/ModelUtils.java
new file mode 100644
index 000000000..eb5bed0a0
--- /dev/null
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/ModelUtils.java
@@ -0,0 +1,194 @@
+package org.dromara.workflow.utils;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.io.IoUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.dromara.common.core.utils.StreamUtils;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.common.json.utils.JsonUtils;
+import org.dromara.workflow.domain.vo.MultiInstanceVo;
+import org.flowable.bpmn.converter.BpmnXMLConverter;
+import org.flowable.bpmn.model.*;
+import org.flowable.bpmn.model.Process;
+import org.flowable.editor.language.json.converter.BpmnJsonConverter;
+import org.flowable.engine.impl.util.ProcessDefinitionUtil;
+
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.rmi.ServerException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * 模型工具
+ *
+ * @author may
+ */
+public class ModelUtils {
+ public ModelUtils() {
+ }
+
+ public static BpmnModel xmlToBpmnModel(String xml) throws IOException {
+ if (xml == null) {
+ throw new ServerException("xml不能为空");
+ }
+ try {
+ InputStream inputStream = new ByteArrayInputStream(StrUtil.utf8Bytes(xml));
+ XMLInputFactory factory = XMLInputFactory.newInstance();
+ XMLStreamReader reader = factory.createXMLStreamReader(inputStream);
+ return new BpmnXMLConverter().convertToBpmnModel(reader);
+ } catch (XMLStreamException e) {
+ throw new ServerException(e.getMessage());
+ }
+ }
+
+ /**
+ * bpmnModel转为xml
+ *
+ * @param jsonBytes json
+ */
+ public static byte[] bpmnJsonToXmlBytes(byte[] jsonBytes) throws IOException {
+ if (jsonBytes == null) {
+ return new byte[0];
+ }
+ // 1. json字节码转成 BpmnModel 对象
+ ObjectMapper objectMapper = JsonUtils.getObjectMapper();
+ JsonNode jsonNode = objectMapper.readTree(jsonBytes);
+ BpmnModel bpmnModel = new BpmnJsonConverter().convertToBpmnModel(jsonNode);
+
+ if (bpmnModel.getProcesses().isEmpty()) {
+ return new byte[0];
+ }
+ // 2.将bpmnModel转为xml
+ return new BpmnXMLConverter().convertToXML(bpmnModel);
+ }
+
+ /**
+ * xml转为bpmnModel
+ *
+ * @param xmlBytes xml
+ */
+ public static BpmnModel xmlToBpmnModel(byte[] xmlBytes) throws XMLStreamException {
+ ByteArrayInputStream byteArrayInputStream = IoUtil.toStream(xmlBytes);
+ XMLInputFactory xif = XMLInputFactory.newInstance();
+ XMLStreamReader xtr = xif.createXMLStreamReader(byteArrayInputStream);
+ return new BpmnXMLConverter().convertToBpmnModel(xtr);
+ }
+
+ /**
+ * 校验模型
+ *
+ * @param bpmnModel bpmn模型
+ */
+ public static void checkBpmnModel(BpmnModel bpmnModel) throws ServerException {
+ Collection flowElements = bpmnModel.getMainProcess().getFlowElements();
+
+ checkBpmnNode(flowElements, false);
+
+ List subProcessList = flowElements.stream().filter(SubProcess.class::isInstance).map(SubProcess.class::cast).collect(Collectors.toList());
+ if (!CollUtil.isEmpty(subProcessList)) {
+ for (SubProcess subProcess : subProcessList) {
+ Collection subProcessFlowElements = subProcess.getFlowElements();
+ checkBpmnNode(subProcessFlowElements, true);
+ }
+ }
+ List multiInstanceVoList = new ArrayList<>();
+ for (FlowElement flowElement : flowElements) {
+ if (flowElement instanceof UserTask && ObjectUtil.isNotEmpty(((UserTask) flowElement).getLoopCharacteristics()) && StringUtils.isNotBlank(((UserTask) flowElement).getLoopCharacteristics().getInputDataItem())) {
+ MultiInstanceVo multiInstanceVo = new MultiInstanceVo();
+ multiInstanceVo.setAssigneeList(((UserTask) flowElement).getLoopCharacteristics().getInputDataItem());
+ multiInstanceVoList.add(multiInstanceVo);
+ }
+ }
+
+ if (CollectionUtil.isNotEmpty(multiInstanceVoList) && multiInstanceVoList.size() > 1) {
+ Map> assigneeListGroup = StreamUtils.groupByKey(multiInstanceVoList, MultiInstanceVo::getAssigneeList);
+ for (Map.Entry> entry : assigneeListGroup.entrySet()) {
+ List value = entry.getValue();
+ if (CollectionUtil.isNotEmpty(value) && value.size() > 1) {
+ String key = entry.getKey();
+ throw new ServerException("会签人员集合【" + key + "】重复,请重新设置集合KEY");
+ }
+ }
+ }
+ }
+
+ /**
+ * 校验bpmn节点是否合法
+ *
+ * @param flowElements 节点集合
+ * @param subtask 是否子流程
+ */
+ private static void checkBpmnNode(Collection flowElements, boolean subtask) throws ServerException {
+
+ if (CollUtil.isEmpty(flowElements)) {
+ throw new ServerException(subtask ? "子流程必须存在节点" : "必须存在节点!");
+ }
+
+ List startEventList = flowElements.stream().filter(StartEvent.class::isInstance).map(StartEvent.class::cast).collect(Collectors.toList());
+ if (CollUtil.isEmpty(startEventList)) {
+ throw new ServerException(subtask ? "子流程必须存在开始节点" : "必须存在开始节点!");
+ }
+
+ if (startEventList.size() > 1) {
+ throw new ServerException(subtask ? "子流程只能存在一个开始节点" : "只能存在一个开始节点!");
+ }
+
+ StartEvent startEvent = startEventList.get(0);
+ List outgoingFlows = startEvent.getOutgoingFlows();
+ if (CollUtil.isEmpty(outgoingFlows)) {
+ throw new ServerException(subtask ? "子流程流程节点为空,请至少设计一条主线流程!" : "流程节点为空,请至少设计一条主线流程!");
+ }
+
+ FlowElement targetFlowElement = outgoingFlows.get(0).getTargetFlowElement();
+ if (!(targetFlowElement instanceof UserTask) && !subtask) {
+ throw new ServerException("开始节点后第一个节点必须是用户任务!");
+ }
+
+ List endEventList = flowElements.stream().filter(EndEvent.class::isInstance).map(EndEvent.class::cast).collect(Collectors.toList());
+ if (CollUtil.isEmpty(endEventList)) {
+ throw new ServerException(subtask ? "子流程必须存在结束节点!" : "必须存在结束节点!");
+ }
+ }
+
+ /**
+ * 获取流程全部节点
+ *
+ * @param processDefinitionId 流程定义id
+ */
+ public static List getFlowElements(String processDefinitionId) {
+ BpmnModel bpmnModel = ProcessDefinitionUtil.getBpmnModel(processDefinitionId);
+ List list = new ArrayList<>();
+ List processes = bpmnModel.getProcesses();
+ Collection flowElements = processes.get(0).getFlowElements();
+ buildFlowElements(flowElements, list);
+ return list;
+ }
+
+ /**
+ * 递归获取所有节点
+ *
+ * @param flowElements 节点信息
+ * @param list 集合
+ */
+ private static void buildFlowElements(Collection flowElements, List list) {
+ for (FlowElement flowElement : flowElements) {
+ list.add(flowElement);
+ if (flowElement instanceof SubProcess) {
+ Collection subFlowElements = ((SubProcess) flowElement).getFlowElements();
+ buildFlowElements(subFlowElements, list);
+ }
+ }
+ }
+}
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/WorkflowUtils.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/WorkflowUtils.java
index 3cd72eb75..d84834ade 100644
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/WorkflowUtils.java
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/WorkflowUtils.java
@@ -66,117 +66,6 @@ public class WorkflowUtils {
private static final IWorkflowUserService I_WORKFLOW_USER_SERVICE = SpringUtils.getBean(WorkflowUserServiceImpl.class);
private static final IActHiProcinstService I_ACT_HI_PROCINST_SERVICE = SpringUtils.getBean(IActHiProcinstService.class);
- /**
- * bpmnModel转为xml
- *
- * @param jsonBytes json
- */
- public static byte[] bpmnJsonToXmlBytes(byte[] jsonBytes) throws IOException {
- if (jsonBytes == null) {
- return new byte[0];
- }
- // 1. json字节码转成 BpmnModel 对象
- ObjectMapper objectMapper = JsonUtils.getObjectMapper();
- JsonNode jsonNode = objectMapper.readTree(jsonBytes);
- BpmnModel bpmnModel = new BpmnJsonConverter().convertToBpmnModel(jsonNode);
-
- if (bpmnModel.getProcesses().isEmpty()) {
- return new byte[0];
- }
- //解决设计器选择设置流程发起人设置变量有问题
- Collection flowElements = bpmnModel.getMainProcess().getFlowElements();
- repairInitiatorVariable(flowElements);
- // 2.将bpmnModel转为xml
- return new BpmnXMLConverter().convertToXML(bpmnModel);
- }
-
- /**
- * 修复发起人节点变量错误问题
- *
- * @param flowElements 节点
- */
- private static void repairInitiatorVariable(Collection flowElements) {
- for (FlowElement flowElement : flowElements) {
- if (flowElement instanceof SubProcess) {
- Collection subFlowElements = ((SubProcess) flowElement).getFlowElements();
- repairInitiatorVariable(subFlowElements);
- } else {
- if (flowElement instanceof UserTask && INITIATOR_SET.equals(((UserTask) flowElement).getAssignee())) {
- ((UserTask) flowElement).setAssignee(INITIATOR_SET_UPDATE);
- }
- }
- }
- }
-
- /**
- * xml转为bpmnModel
- *
- * @param xmlBytes xml
- */
- public static BpmnModel xmlToBpmnModel(byte[] xmlBytes) throws XMLStreamException {
- ByteArrayInputStream byteArrayInputStream = IoUtil.toStream(xmlBytes);
- XMLInputFactory xif = XMLInputFactory.newInstance();
- XMLStreamReader xtr = xif.createXMLStreamReader(byteArrayInputStream);
- return new BpmnXMLConverter().convertToBpmnModel(xtr);
- }
-
- /**
- * 校验模型
- *
- * @param bpmnModel bpmn模型
- */
- public static void checkBpmnModel(BpmnModel bpmnModel) throws ServerException {
- Collection flowElements = bpmnModel.getMainProcess().getFlowElements();
-
- checkBpmnNode(flowElements, false);
-
- List subProcessList = flowElements.stream().filter(SubProcess.class::isInstance).map(SubProcess.class::cast).collect(Collectors.toList());
- if (!CollUtil.isEmpty(subProcessList)) {
- for (SubProcess subProcess : subProcessList) {
- Collection subProcessFlowElements = subProcess.getFlowElements();
- checkBpmnNode(subProcessFlowElements, true);
- }
- }
- }
-
- /**
- * 校验bpmn节点是否合法
- *
- * @param flowElements 节点集合
- * @param subtask 是否子流程
- */
- private static void checkBpmnNode(Collection flowElements, boolean subtask) throws ServerException {
-
- if (CollUtil.isEmpty(flowElements)) {
- throw new ServerException(subtask ? "子流程必须存在节点" : "必须存在节点!");
- }
-
- List startEventList = flowElements.stream().filter(StartEvent.class::isInstance).map(StartEvent.class::cast).collect(Collectors.toList());
- if (CollUtil.isEmpty(startEventList)) {
- throw new ServerException(subtask ? "子流程必须存在开始节点" : "必须存在开始节点!");
- }
-
- if (startEventList.size() > 1) {
- throw new ServerException(subtask ? "子流程只能存在一个开始节点" : "只能存在一个开始节点!");
- }
-
- StartEvent startEvent = startEventList.get(0);
- List outgoingFlows = startEvent.getOutgoingFlows();
- if (CollUtil.isEmpty(outgoingFlows)) {
- throw new ServerException(subtask ? "子流程流程节点为空,请至少设计一条主线流程!" : "流程节点为空,请至少设计一条主线流程!");
- }
-
- FlowElement targetFlowElement = outgoingFlows.get(0).getTargetFlowElement();
- if (!(targetFlowElement instanceof UserTask) && !subtask) {
- throw new ServerException("开始节点后第一个节点必须是用户任务!");
- }
-
- List endEventList = flowElements.stream().filter(EndEvent.class::isInstance).map(EndEvent.class::cast).collect(Collectors.toList());
- if (CollUtil.isEmpty(endEventList)) {
- throw new ServerException(subtask ? "子流程必须存在结束节点!" : "必须存在结束节点!");
- }
- }
-
/**
* 创建一个新任务
*