diff --git a/pom.xml b/pom.xml index f93fbfbba..7650c699f 100644 --- a/pom.xml +++ b/pom.xml @@ -53,7 +53,7 @@ 8.7.2-20250603 - 1.8.1 + 1.8.2 2.3.4 diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowGlobalListener.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowGlobalListener.java index 30773899b..2eb58a166 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowGlobalListener.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowGlobalListener.java @@ -75,8 +75,8 @@ public class WorkflowGlobalListener implements GlobalListener { public void start(ListenerVariable listenerVariable) { String ext = listenerVariable.getNode().getExt(); if (StringUtils.isNotBlank(ext)) { - NodeExtVo nodeExt = nodeExtService.parseNodeExt(ext); Map variable = listenerVariable.getVariable(); + NodeExtVo nodeExt = nodeExtService.parseNodeExt(ext, variable); Set copyList = nodeExt.getCopySettings(); if (CollUtil.isNotEmpty(copyList)) { List list = StreamUtils.toList(copyList, x -> { diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwNodeExtService.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwNodeExtService.java index 2ccc6a73e..a94a225ac 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwNodeExtService.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwNodeExtService.java @@ -2,6 +2,8 @@ package org.dromara.workflow.service; import org.dromara.workflow.domain.vo.NodeExtVo; +import java.util.Map; + /** * 流程节点扩展属性 服务层 * @@ -24,9 +26,10 @@ public interface IFlwNodeExtService { * {"code": "VariablesEnum", "value": "key1=value1,key2=value2"} * ] * - * @param ext 扩展属性 JSON 字符串 + * @param ext 扩展属性 JSON 字符串 + * @param variable 流程变量 * @return NodeExtVo 对象,封装按钮权限列表、抄送对象集合和自定义参数 Map */ - NodeExtVo parseNodeExt(String ext); + NodeExtVo parseNodeExt(String ext, Map variable); } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwNodeExtServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwNodeExtServiceImpl.java index 8cb1407d5..12d152832 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwNodeExtServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwNodeExtServiceImpl.java @@ -6,10 +6,14 @@ import cn.hutool.core.util.ObjectUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.dubbo.config.annotation.DubboReference; +import org.dromara.common.core.service.DictService; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.json.utils.JsonUtils; import org.dromara.system.api.RemoteDictService; import org.dromara.system.api.domain.vo.RemoteDictTypeVo; +import org.dromara.warm.flow.core.FlowEngine; +import org.dromara.warm.flow.core.utils.CollUtil; +import org.dromara.warm.flow.core.utils.ExpressionUtil; import org.dromara.warm.flow.ui.service.NodeExtService; import org.dromara.warm.flow.ui.vo.NodeExt; import org.dromara.workflow.common.ConditionalOnEnable; @@ -46,7 +50,7 @@ public class FlwNodeExtServiceImpl implements NodeExtService, IFlwNodeExtService CopySettingEnum.class.getSimpleName(), Map.of( "label", "抄送对象", - "type", 2, + "type", 5, "must", false, "multiple", false, "desc", "设置该节点的抄送办理人" @@ -57,7 +61,7 @@ public class FlwNodeExtServiceImpl implements NodeExtService, IFlwNodeExtService "type", 2, "must", false, "multiple", false, - "desc", "节点执行时可以使用的自定义参数" + "desc", "节点执行时可设置自定义参数,多个参数以逗号分隔,如:key1=value1,key2=value2" ), ButtonPermissionEnum.class.getSimpleName(), Map.of( @@ -139,7 +143,7 @@ public class FlwNodeExtServiceImpl implements NodeExtService, IFlwNodeExtService childNode.setCode(simpleName); // label名称 childNode.setLabel(Convert.toStr(map.get("label"))); - // 1:输入框 2:文本域 3:下拉框 4:选择框 + // 1:输入框 2:文本域 3:下拉框 4:选择框 5:用户选择器 childNode.setType(Convert.toInt(map.get("type"), 1)); // 是否必填 childNode.setMust(Convert.toBool(map.get("must"), false)); @@ -172,7 +176,7 @@ public class FlwNodeExtServiceImpl implements NodeExtService, IFlwNodeExtService childNode.setCode(dictType); // label名称 childNode.setLabel(dictTypeDTO.getDictName()); - // 1:输入框 2:文本域 3:下拉框 4:选择框 + // 1:输入框 2:文本域 3:下拉框 4:选择框 5:用户选择器 childNode.setType(3); // 是否必填 childNode.setMust(false); @@ -199,15 +203,16 @@ public class FlwNodeExtServiceImpl implements NodeExtService, IFlwNodeExtService *

示例 JSON: * [ * {"code": "ButtonPermissionEnum", "value": "back,termination"}, - * {"code": "CopySettingEnum", "value": "1"}, + * {"code": "CopySettingEnum", "value": "1,3,4,#{@spelRuleComponent.selectDeptLeaderById(#deptId", "#roleId)}"}, * {"code": "VariablesEnum", "value": "key1=value1,key2=value2"} * ] * - * @param ext 扩展属性 JSON 字符串 + * @param ext 扩展属性 JSON 字符串 + * @param variable 流程变量 * @return NodeExtVo 对象,封装按钮权限列表、抄送对象集合和自定义参数 Map */ @Override - public NodeExtVo parseNodeExt(String ext) { + public NodeExtVo parseNodeExt(String ext, Map variable) { NodeExtVo nodeExtVo = new NodeExtVo(); // 解析 JSON 为 Dict 列表 @@ -236,8 +241,20 @@ public class FlwNodeExtServiceImpl implements NodeExtService, IFlwNodeExtService nodeExtVo.setButtonPermissions(buttonList); } else if (CopySettingEnum.class.getSimpleName().equals(code)) { + List permissions = spelSmartSplit(value).stream() + .map(s -> { + List result = ExpressionUtil.evalVariable(s, variable); + if (CollUtil.isNotEmpty(result)) { + return result; + } + return Collections.singletonList(s); + }).filter(Objects::nonNull) + .flatMap(List::stream) + .distinct() + .collect(Collectors.toList()); + List copySettings = FlowEngine.permissionHandler().convertPermissions(permissions); // 解析抄送对象 ID 集合 - nodeExtVo.setCopySettings(StringUtils.str2Set(value, StringUtils.SEPARATOR)); + nodeExtVo.setCopySettings(new HashSet<>(copySettings)); } else if (VariablesEnum.class.getSimpleName().equals(code)) { // 解析自定义参数 @@ -256,4 +273,82 @@ public class FlwNodeExtServiceImpl implements NodeExtService, IFlwNodeExtService return nodeExtVo; } + /** + * 按逗号分割字符串,但保留 #{...} 表达式和字符串常量中的逗号 + */ + private static List spelSmartSplit(String str) { + List result = new ArrayList<>(); + if (str == null || str.trim().isEmpty()) { + return result; + } + + StringBuilder token = new StringBuilder(); + // #{...} 的嵌套深度 + int depth = 0; + // 是否在字符串常量中(" 或 ') + boolean inString = false; + // 当前字符串引号类型 + char stringQuote = 0; + + for (int i = 0; i < str.length(); i++) { + char c = str.charAt(i); + + // 检测进入 SpEL 表达式 #{...} + if (!inString && c == '#' && depth == 0 && checkNext(str, i, '{')) { + depth++; + token.append("#{"); + // 跳过 { + i++; + continue; + } + + // 在表达式中遇到 { 或 } 改变嵌套深度 + if (!inString && depth > 0) { + if (c == '{') { + depth++; + } else if (c == '}') { + depth--; + } + token.append(c); + continue; + } + + // 检测字符串开始/结束 + if (depth > 0 && (c == '"' || c == '\'')) { + if (!inString) { + inString = true; + stringQuote = c; + } else if (stringQuote == c) { + inString = false; + } + token.append(c); + continue; + } + + // 外层逗号才分割 + if (c == ',' && depth == 0 && !inString) { + String part = token.toString().trim(); + if (!part.isEmpty()) { + result.add(part); + } + token.setLength(0); + continue; + } + + token.append(c); + } + + // 添加最后一个 + String part = token.toString().trim(); + if (!part.isEmpty()) { + result.add(part); + } + + return result; + } + + private static boolean checkNext(String str, int index, char expected) { + return index + 1 < str.length() && str.charAt(index + 1) == expected; + } + } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java index c7fc3d707..25726ea05 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java @@ -600,7 +600,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService { if (ObjectUtil.isNull(flowNode)) { throw new NullPointerException("当前【" + flowTaskVo.getNodeCode() + "】节点编码不存在"); } - NodeExtVo nodeExtVo = flwNodeExtService.parseNodeExt(flowNode.getExt()); + NodeExtVo nodeExtVo = flwNodeExtService.parseNodeExt(flowNode.getExt(), instance.getVariableMap()); //设置按钮权限 flowTaskVo.setButtonList(nodeExtVo.getButtonPermissions()); if (CollUtil.isNotEmpty(nodeExtVo.getCopySettings())) { diff --git a/script/sql/oracle/oracle_ry_workflow.sql b/script/sql/oracle/oracle_ry_workflow.sql index a56aa5b5f..c20e9e5f8 100644 --- a/script/sql/oracle/oracle_ry_workflow.sql +++ b/script/sql/oracle/oracle_ry_workflow.sql @@ -17,7 +17,9 @@ create table FLOW_DEFINITION LISTENER_PATH VARCHAR2(500), EXT VARCHAR2(500), CREATE_TIME DATE, + CREATE_BY VARCHAR2(64) default '', UPDATE_TIME DATE, + UPDATE_BY VARCHAR2(64) default '', DEL_FLAG VARCHAR2(1) default '0', TENANT_ID VARCHAR2(40) ); @@ -40,7 +42,9 @@ comment on column FLOW_DEFINITION.LISTENER_TYPE is '监听器类型'; comment on column FLOW_DEFINITION.LISTENER_PATH is '监听器路径'; comment on column FLOW_DEFINITION.EXT is '扩展字段,预留给业务系统使用'; comment on column FLOW_DEFINITION.CREATE_TIME is '创建时间'; +comment on column FLOW_DEFINITION.CREATE_BY is '创建人'; comment on column FLOW_DEFINITION.UPDATE_TIME is '更新时间'; +comment on column FLOW_DEFINITION.UPDATE_BY is '更新人'; comment on column FLOW_DEFINITION.DEL_FLAG is '删除标志'; comment on column FLOW_DEFINITION.TENANT_ID is '租户id'; @@ -62,7 +66,9 @@ create table FLOW_NODE FORM_PATH VARCHAR2(100), VERSION VARCHAR2(20), CREATE_TIME DATE, + CREATE_BY VARCHAR2(64) default '', UPDATE_TIME DATE, + UPDATE_BY VARCHAR2(64) default '', EXT CLOB, DEL_FLAG VARCHAR2(1) default '0', TENANT_ID VARCHAR2(40), @@ -89,7 +95,9 @@ comment on column FLOW_NODE.FORM_CUSTOM is '审批表单是否自定义 (Y是 N comment on column FLOW_NODE.FORM_PATH is '审批表单路径'; comment on column FLOW_NODE.VERSION is '版本'; comment on column FLOW_NODE.CREATE_TIME is '创建时间'; +comment on column FLOW_NODE.CREATE_BY is '创建人'; comment on column FLOW_NODE.UPDATE_TIME is '更新时间'; +comment on column FLOW_NODE.UPDATE_BY is '更新人'; comment on column FLOW_NODE.EXT is '节点扩展属性'; comment on column FLOW_NODE.DEL_FLAG is '删除标志'; comment on column FLOW_NODE.TENANT_ID is '租户id'; @@ -108,7 +116,9 @@ create table FLOW_SKIP SKIP_CONDITION VARCHAR2(200), COORDINATE VARCHAR2(100), CREATE_TIME DATE, + CREATE_BY VARCHAR2(64) default '', UPDATE_TIME DATE, + UPDATE_BY VARCHAR2(64) default '', DEL_FLAG VARCHAR2(1) default '0', TENANT_ID VARCHAR2(40) ); @@ -128,7 +138,9 @@ comment on column FLOW_SKIP.SKIP_TYPE is '跳转类型 (PASS审批通过 REJECT comment on column FLOW_SKIP.SKIP_CONDITION is '跳转条件'; comment on column FLOW_SKIP.COORDINATE is '坐标'; comment on column FLOW_SKIP.CREATE_TIME is '创建时间'; +comment on column FLOW_SKIP.CREATE_BY is '创建人'; comment on column FLOW_SKIP.UPDATE_TIME is '更新时间'; +comment on column FLOW_SKIP.UPDATE_BY is '更新人'; comment on column FLOW_SKIP.DEL_FLAG is '删除标志'; comment on column FLOW_SKIP.TENANT_ID is '租户id'; @@ -144,9 +156,10 @@ create table FLOW_INSTANCE FLOW_STATUS VARCHAR2(20), ACTIVITY_STATUS NUMBER(1) default 1, DEF_JSON CLOB, - CREATE_BY VARCHAR2(64) default '', CREATE_TIME DATE, + CREATE_BY VARCHAR2(64) default '', UPDATE_TIME DATE, + UPDATE_BY VARCHAR2(64) default '', EXT VARCHAR2(500), DEL_FLAG VARCHAR2(1) default '0', TENANT_ID VARCHAR2(40) @@ -166,9 +179,10 @@ comment on column FLOW_INSTANCE.VARIABLE is '任务变量'; comment on column FLOW_INSTANCE.FLOW_STATUS is '流程状态(0待提交 1审批中 2审批通过 4终止 5作废 6撤销 8已完成 9已退回 10失效 11拿回)'; comment on column FLOW_INSTANCE.ACTIVITY_STATUS is '流程激活状态(0挂起 1激活)'; comment on column FLOW_INSTANCE.DEF_JSON is '流程定义json'; -comment on column FLOW_INSTANCE.CREATE_BY is '创建者'; comment on column FLOW_INSTANCE.CREATE_TIME is '创建时间'; +comment on column FLOW_INSTANCE.CREATE_BY is '创建人'; comment on column FLOW_INSTANCE.UPDATE_TIME is '更新时间'; +comment on column FLOW_INSTANCE.UPDATE_BY is '更新人'; comment on column FLOW_INSTANCE.EXT is '扩展字段,预留给业务系统使用'; comment on column FLOW_INSTANCE.DEL_FLAG is '删除标志'; comment on column FLOW_INSTANCE.TENANT_ID is '租户id'; @@ -185,7 +199,9 @@ create table FLOW_TASK FORM_CUSTOM VARCHAR2(1) default 'N', FORM_PATH VARCHAR2(100), CREATE_TIME DATE, + CREATE_BY VARCHAR2(64) default '', UPDATE_TIME DATE, + UPDATE_BY VARCHAR2(64) default '', DEL_FLAG VARCHAR2(1) default '0', TENANT_ID VARCHAR2(40) ); @@ -204,7 +220,9 @@ comment on column FLOW_TASK.FLOW_STATUS is '流程状态(0待提交 1审批中 comment on column FLOW_TASK.FORM_CUSTOM is '审批表单是否自定义 (Y是 N否)'; comment on column FLOW_TASK.FORM_PATH is '审批表单路径'; comment on column FLOW_TASK.CREATE_TIME is '创建时间'; +comment on column FLOW_TASK.CREATE_BY is '创建人'; comment on column FLOW_TASK.UPDATE_TIME is '更新时间'; +comment on column FLOW_TASK.UPDATE_BY is '更新人'; comment on column FLOW_TASK.DEL_FLAG is '删除标志'; comment on column FLOW_TASK.TENANT_ID is '租户id'; @@ -271,8 +289,9 @@ create table FLOW_USER PROCESSED_BY VARCHAR2(80), ASSOCIATED NUMBER(20) not null, CREATE_TIME DATE, - CREATE_BY VARCHAR2(80), + CREATE_BY VARCHAR2(64) default '', UPDATE_TIME DATE, + UPDATE_BY VARCHAR2(64) default '', DEL_FLAG VARCHAR2(1) default '0', TENANT_ID VARCHAR2(40) ); @@ -286,8 +305,9 @@ comment on column FLOW_USER.TYPE is '人员类型(1待办任务的审批人权 comment on column FLOW_USER.PROCESSED_BY is '权限人)'; comment on column FLOW_USER.ASSOCIATED is '任务表id'; comment on column FLOW_USER.CREATE_TIME is '创建时间'; -comment on column FLOW_USER.CREATE_BY is '节点名称'; +comment on column FLOW_USER.CREATE_BY is '创建人'; comment on column FLOW_USER.UPDATE_TIME is '更新时间'; +comment on column FLOW_USER.UPDATE_BY is '更新人'; comment on column FLOW_USER.DEL_FLAG is '删除标志'; comment on column FLOW_USER.TENANT_ID is '租户id'; diff --git a/script/sql/postgres/postgres_ry_workflow.sql b/script/sql/postgres/postgres_ry_workflow.sql index 9ebb4e794..a228b3f95 100644 --- a/script/sql/postgres/postgres_ry_workflow.sql +++ b/script/sql/postgres/postgres_ry_workflow.sql @@ -14,7 +14,9 @@ CREATE TABLE flow_definition listener_path varchar(400) NULL, ext varchar(500) NULL, create_time timestamp NULL, + create_by varchar(64) NULL DEFAULT '':: character varying, update_time timestamp NULL, + update_by varchar(64) NULL DEFAULT '':: character varying, del_flag bpchar(1) NULL DEFAULT '0':: character varying, tenant_id varchar(40) NULL, CONSTRAINT flow_definition_pkey PRIMARY KEY (id) @@ -35,7 +37,9 @@ COMMENT ON COLUMN flow_definition.listener_type IS '监听器类型'; COMMENT ON COLUMN flow_definition.listener_path IS '监听器路径'; COMMENT ON COLUMN flow_definition.ext IS '扩展字段,预留给业务系统使用'; COMMENT ON COLUMN flow_definition.create_time IS '创建时间'; +COMMENT ON COLUMN flow_definition.create_by IS '创建人'; COMMENT ON COLUMN flow_definition.update_time IS '更新时间'; +COMMENT ON COLUMN flow_definition.update_by IS '更新人'; COMMENT ON COLUMN flow_definition.del_flag IS '删除标志'; COMMENT ON COLUMN flow_definition.tenant_id IS '租户id'; @@ -58,7 +62,9 @@ CREATE TABLE flow_node form_path varchar(100) NULL, "version" varchar(20) NOT NULL, create_time timestamp NULL, + create_by varchar(64) NULL DEFAULT '':: character varying, update_time timestamp NULL, + update_by varchar(64) NULL DEFAULT '':: character varying, ext text NULL, del_flag bpchar(1) NULL DEFAULT '0':: character varying, tenant_id varchar(40) NULL, @@ -83,7 +89,9 @@ COMMENT ON COLUMN flow_node.form_custom IS '审批表单是否自定义(Y是 N COMMENT ON COLUMN flow_node.form_path IS '审批表单路径'; COMMENT ON COLUMN flow_node."version" IS '版本'; COMMENT ON COLUMN flow_node.create_time IS '创建时间'; +COMMENT ON COLUMN flow_node.create_by IS '创建人'; COMMENT ON COLUMN flow_node.update_time IS '更新时间'; +COMMENT ON COLUMN flow_node.update_by IS '更新人'; COMMENT ON COLUMN flow_node.ext IS '节点扩展属性'; COMMENT ON COLUMN flow_node.del_flag IS '删除标志'; COMMENT ON COLUMN flow_node.tenant_id IS '租户id'; @@ -102,7 +110,9 @@ CREATE TABLE flow_skip skip_condition varchar(200) NULL, coordinate varchar(100) NULL, create_time timestamp NULL, + create_by varchar(64) NULL DEFAULT '':: character varying, update_time timestamp NULL, + update_by varchar(64) NULL DEFAULT '':: character varying, del_flag bpchar(1) NULL DEFAULT '0':: character varying, tenant_id varchar(40) NULL, CONSTRAINT flow_skip_pkey PRIMARY KEY (id) @@ -120,7 +130,9 @@ COMMENT ON COLUMN flow_skip.skip_type IS '跳转类型(PASS审批通过 REJECT COMMENT ON COLUMN flow_skip.skip_condition IS '跳转条件'; COMMENT ON COLUMN flow_skip.coordinate IS '坐标'; COMMENT ON COLUMN flow_skip.create_time IS '创建时间'; +COMMENT ON COLUMN flow_skip.create_by IS '创建人'; COMMENT ON COLUMN flow_skip.update_time IS '更新时间'; +COMMENT ON COLUMN flow_skip.update_by IS '更新人'; COMMENT ON COLUMN flow_skip.del_flag IS '删除标志'; COMMENT ON COLUMN flow_skip.tenant_id IS '租户id'; @@ -136,9 +148,10 @@ CREATE TABLE flow_instance flow_status varchar(20) NOT NULL, activity_status int2 NOT NULL DEFAULT 1, def_json text NULL, - create_by varchar(64) NULL DEFAULT '':: character varying, create_time timestamp NULL, + create_by varchar(64) NULL DEFAULT '':: character varying, update_time timestamp NULL, + update_by varchar(64) NULL DEFAULT '':: character varying, ext varchar(500) NULL, del_flag bpchar(1) NULL DEFAULT '0':: character varying, tenant_id varchar(40) NULL, @@ -156,9 +169,10 @@ COMMENT ON COLUMN flow_instance.variable IS '任务变量'; COMMENT ON COLUMN flow_instance.flow_status IS '流程状态(0待提交 1审批中 2审批通过 4终止 5作废 6撤销 8已完成 9已退回 10失效 11拿回)'; COMMENT ON COLUMN flow_instance.activity_status IS '流程激活状态(0挂起 1激活)'; COMMENT ON COLUMN flow_instance.def_json IS '流程定义json'; -COMMENT ON COLUMN flow_instance.create_by IS '创建者'; COMMENT ON COLUMN flow_instance.create_time IS '创建时间'; +COMMENT ON COLUMN flow_instance.create_by IS '创建人'; COMMENT ON COLUMN flow_instance.update_time IS '更新时间'; +COMMENT ON COLUMN flow_instance.update_by IS '更新人'; COMMENT ON COLUMN flow_instance.ext IS '扩展字段,预留给业务系统使用'; COMMENT ON COLUMN flow_instance.del_flag IS '删除标志'; COMMENT ON COLUMN flow_instance.tenant_id IS '租户id'; @@ -175,7 +189,9 @@ CREATE TABLE flow_task form_custom bpchar(1) NULL DEFAULT 'N':: character varying, form_path varchar(100) NULL, create_time timestamp NULL, + create_by varchar(64) NULL DEFAULT '':: character varying, update_time timestamp NULL, + update_by varchar(64) NULL DEFAULT '':: character varying, del_flag bpchar(1) NULL DEFAULT '0':: character varying, tenant_id varchar(40) NULL, CONSTRAINT flow_task_pkey PRIMARY KEY (id) @@ -192,7 +208,9 @@ COMMENT ON COLUMN flow_task.flow_status IS '流程状态(0待提交 1审批中 COMMENT ON COLUMN flow_task.form_custom IS '审批表单是否自定义(Y是 N否)'; COMMENT ON COLUMN flow_task.form_path IS '审批表单路径'; COMMENT ON COLUMN flow_task.create_time IS '创建时间'; +COMMENT ON COLUMN flow_task.create_by IS '创建人'; COMMENT ON COLUMN flow_task.update_time IS '更新时间'; +COMMENT ON COLUMN flow_task.update_by IS '更新人'; COMMENT ON COLUMN flow_task.del_flag IS '删除标志'; COMMENT ON COLUMN flow_task.tenant_id IS '租户id'; @@ -256,8 +274,9 @@ CREATE TABLE flow_user processed_by varchar(80) NULL, associated int8 NOT NULL, create_time timestamp NULL, - create_by varchar(80) NULL, + create_by varchar(64) NULL DEFAULT '':: character varying, update_time timestamp NULL, + update_by varchar(64) NULL DEFAULT '':: character varying, del_flag bpchar(1) NULL DEFAULT '0':: character varying, tenant_id varchar(40) NULL, CONSTRAINT flow_user_pk PRIMARY KEY (id) @@ -273,6 +292,7 @@ COMMENT ON COLUMN flow_user.associated IS '任务表id'; COMMENT ON COLUMN flow_user.create_time IS '创建时间'; COMMENT ON COLUMN flow_user.create_by IS '创建人'; COMMENT ON COLUMN flow_user.update_time IS '更新时间'; +COMMENT ON COLUMN flow_user.update_by IS '更新人'; COMMENT ON COLUMN flow_user.del_flag IS '删除标志'; COMMENT ON COLUMN flow_user.tenant_id IS '租户id'; diff --git a/script/sql/ry-workflow.sql b/script/sql/ry-workflow.sql index c93359711..80cd88ba8 100644 --- a/script/sql/ry-workflow.sql +++ b/script/sql/ry-workflow.sql @@ -17,7 +17,9 @@ CREATE TABLE `flow_definition` `listener_path` varchar(400) DEFAULT NULL COMMENT '监听器路径', `ext` varchar(500) DEFAULT NULL COMMENT '业务详情 存业务表对象json字符串', `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `create_by` varchar(64) DEFAULT '' COMMENT '创建人', `update_time` datetime DEFAULT NULL COMMENT '更新时间', + `update_by` varchar(64) DEFAULT '' COMMENT '更新人', `del_flag` char(1) DEFAULT '0' COMMENT '删除标志', `tenant_id` varchar(40) DEFAULT NULL COMMENT '租户id', PRIMARY KEY (`id`) USING BTREE @@ -42,7 +44,9 @@ CREATE TABLE `flow_node` `form_path` varchar(100) DEFAULT NULL COMMENT '审批表单路径', `version` varchar(20) NOT NULL COMMENT '版本', `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `create_by` varchar(64) DEFAULT '' COMMENT '创建人', `update_time` datetime DEFAULT NULL COMMENT '更新时间', + `update_by` varchar(64) DEFAULT '' COMMENT '更新人', `ext` text COMMENT '节点扩展属性', `del_flag` char(1) DEFAULT '0' COMMENT '删除标志', `tenant_id` varchar(40) DEFAULT NULL COMMENT '租户id', @@ -62,7 +66,9 @@ CREATE TABLE `flow_skip` `skip_condition` varchar(200) DEFAULT NULL COMMENT '跳转条件', `coordinate` varchar(100) DEFAULT NULL COMMENT '坐标', `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `create_by` varchar(64) DEFAULT '' COMMENT '创建人', `update_time` datetime DEFAULT NULL COMMENT '更新时间', + `update_by` varchar(64) DEFAULT '' COMMENT '更新人', `del_flag` char(1) DEFAULT '0' COMMENT '删除标志', `tenant_id` varchar(40) DEFAULT NULL COMMENT '租户id', PRIMARY KEY (`id`) USING BTREE @@ -80,9 +86,10 @@ CREATE TABLE `flow_instance` `flow_status` varchar(20) NOT NULL COMMENT '流程状态(0待提交 1审批中 2审批通过 4终止 5作废 6撤销 8已完成 9已退回 10失效 11拿回)', `activity_status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '流程激活状态(0挂起 1激活)', `def_json` text COMMENT '流程定义json', - `create_by` varchar(64) DEFAULT '' COMMENT '创建者', `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `create_by` varchar(64) DEFAULT '' COMMENT '创建人', `update_time` datetime DEFAULT NULL COMMENT '更新时间', + `update_by` varchar(64) DEFAULT '' COMMENT '更新人', `ext` varchar(500) DEFAULT NULL COMMENT '扩展字段,预留给业务系统使用', `del_flag` char(1) DEFAULT '0' COMMENT '删除标志', `tenant_id` varchar(40) DEFAULT NULL COMMENT '租户id', @@ -101,7 +108,9 @@ CREATE TABLE `flow_task` `form_custom` char(1) DEFAULT 'N' COMMENT '审批表单是否自定义(Y是 N否)', `form_path` varchar(100) DEFAULT NULL COMMENT '审批表单路径', `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `create_by` varchar(64) DEFAULT '' COMMENT '创建人', `update_time` datetime DEFAULT NULL COMMENT '更新时间', + `update_by` varchar(64) DEFAULT '' COMMENT '更新人', `del_flag` char(1) DEFAULT '0' COMMENT '删除标志', `tenant_id` varchar(40) DEFAULT NULL COMMENT '租户id', PRIMARY KEY (`id`) USING BTREE @@ -118,7 +127,7 @@ CREATE TABLE `flow_his_task` `node_type` tinyint(1) DEFAULT NULL COMMENT '开始节点类型(0开始节点 1中间节点 2结束节点 3互斥网关 4并行网关)', `target_node_code` varchar(200) DEFAULT NULL COMMENT '目标节点编码', `target_node_name` varchar(200) DEFAULT NULL COMMENT '结束节点名称', - `approver` varchar(40) DEFAULT NULL COMMENT '审批者', + `approver` varchar(40) DEFAULT NULL COMMENT '审批人', `cooperate_type` tinyint(1) NOT NULL DEFAULT '0' COMMENT '协作方式(1审批 2转办 3委派 4会签 5票签 6加签 7减签)', `collaborator` varchar(500) DEFAULT NULL COMMENT '协作人', `skip_type` varchar(10) NOT NULL COMMENT '流转类型(PASS通过 REJECT退回 NONE无动作)', @@ -145,6 +154,7 @@ CREATE TABLE `flow_user` `create_time` datetime DEFAULT NULL COMMENT '创建时间', `create_by` varchar(80) DEFAULT NULL COMMENT '创建人', `update_time` datetime DEFAULT NULL COMMENT '更新时间', + `update_by` varchar(64) DEFAULT '' COMMENT '创建人', `del_flag` char(1) DEFAULT '0' COMMENT '删除标志', `tenant_id` varchar(40) DEFAULT NULL COMMENT '租户id', PRIMARY KEY (`id`) USING BTREE, diff --git a/script/sql/update/oracle/update_5.5.0-5.5.1.sql b/script/sql/update/oracle/update_5.5.0-5.5.1.sql new file mode 100644 index 000000000..8fa28c007 --- /dev/null +++ b/script/sql/update/oracle/update_5.5.0-5.5.1.sql @@ -0,0 +1,25 @@ +ALTER TABLE flow_definition ADD create_by VARCHAR2(64) DEFAULT '' NOT NULL; +ALTER TABLE flow_definition ADD update_by VARCHAR2(64) DEFAULT '' NOT NULL; +COMMENT ON COLUMN flow_definition.create_by IS '创建人'; +COMMENT ON COLUMN flow_definition.update_by IS '更新人'; + +ALTER TABLE flow_node ADD create_by VARCHAR2(64) DEFAULT '' NOT NULL; +ALTER TABLE flow_node ADD update_by VARCHAR2(64) DEFAULT '' NOT NULL; +COMMENT ON COLUMN flow_node.create_by IS '创建人'; +COMMENT ON COLUMN flow_node.update_by IS '更新人'; + +ALTER TABLE flow_skip ADD create_by VARCHAR2(64) DEFAULT '' NOT NULL; +ALTER TABLE flow_skip ADD update_by VARCHAR2(64) DEFAULT '' NOT NULL; +COMMENT ON COLUMN flow_skip.create_by IS '创建人'; +COMMENT ON COLUMN flow_skip.update_by IS '更新人'; + +ALTER TABLE flow_instance ADD update_by VARCHAR2(64) DEFAULT '' NOT NULL; +COMMENT ON COLUMN flow_instance.update_by IS '更新人'; + +ALTER TABLE flow_task ADD create_by VARCHAR2(64) DEFAULT '' NOT NULL; +ALTER TABLE flow_task ADD update_by VARCHAR2(64) DEFAULT '' NOT NULL; +COMMENT ON COLUMN flow_task.create_by IS '创建人'; +COMMENT ON COLUMN flow_task.update_by IS '更新人'; + +ALTER TABLE flow_user ADD update_by VARCHAR2(64) DEFAULT '' NOT NULL; +COMMENT ON COLUMN flow_user.update_by IS '更新人'; diff --git a/script/sql/update/postgres/update_5.5.0-5.5.1.sql b/script/sql/update/postgres/update_5.5.0-5.5.1.sql new file mode 100644 index 000000000..8fa28c007 --- /dev/null +++ b/script/sql/update/postgres/update_5.5.0-5.5.1.sql @@ -0,0 +1,25 @@ +ALTER TABLE flow_definition ADD create_by VARCHAR2(64) DEFAULT '' NOT NULL; +ALTER TABLE flow_definition ADD update_by VARCHAR2(64) DEFAULT '' NOT NULL; +COMMENT ON COLUMN flow_definition.create_by IS '创建人'; +COMMENT ON COLUMN flow_definition.update_by IS '更新人'; + +ALTER TABLE flow_node ADD create_by VARCHAR2(64) DEFAULT '' NOT NULL; +ALTER TABLE flow_node ADD update_by VARCHAR2(64) DEFAULT '' NOT NULL; +COMMENT ON COLUMN flow_node.create_by IS '创建人'; +COMMENT ON COLUMN flow_node.update_by IS '更新人'; + +ALTER TABLE flow_skip ADD create_by VARCHAR2(64) DEFAULT '' NOT NULL; +ALTER TABLE flow_skip ADD update_by VARCHAR2(64) DEFAULT '' NOT NULL; +COMMENT ON COLUMN flow_skip.create_by IS '创建人'; +COMMENT ON COLUMN flow_skip.update_by IS '更新人'; + +ALTER TABLE flow_instance ADD update_by VARCHAR2(64) DEFAULT '' NOT NULL; +COMMENT ON COLUMN flow_instance.update_by IS '更新人'; + +ALTER TABLE flow_task ADD create_by VARCHAR2(64) DEFAULT '' NOT NULL; +ALTER TABLE flow_task ADD update_by VARCHAR2(64) DEFAULT '' NOT NULL; +COMMENT ON COLUMN flow_task.create_by IS '创建人'; +COMMENT ON COLUMN flow_task.update_by IS '更新人'; + +ALTER TABLE flow_user ADD update_by VARCHAR2(64) DEFAULT '' NOT NULL; +COMMENT ON COLUMN flow_user.update_by IS '更新人'; diff --git a/script/sql/update/update_5.5.0-5.5.1.sql b/script/sql/update/update_5.5.0-5.5.1.sql new file mode 100644 index 000000000..17a60af35 --- /dev/null +++ b/script/sql/update/update_5.5.0-5.5.1.sql @@ -0,0 +1,21 @@ +ALTER TABLE `flow_definition` + ADD COLUMN `create_by` varchar(64) NULL DEFAULT NULL COMMENT '创建人' AFTER `create_time`, + ADD COLUMN `update_by` varchar(64) NULL DEFAULT NULL COMMENT '更新人' AFTER `update_time`; + +ALTER TABLE `flow_node` + ADD COLUMN `create_by` varchar(64) NULL DEFAULT NULL COMMENT '创建人' AFTER `create_time`, + ADD COLUMN `update_by` varchar(64) NULL DEFAULT NULL COMMENT '更新人' AFTER `update_time`; + +ALTER TABLE `flow_skip` + ADD COLUMN `create_by` varchar(64) NULL DEFAULT NULL COMMENT '创建人' AFTER `create_time`, + ADD COLUMN `update_by` varchar(64) NULL DEFAULT NULL COMMENT '更新人' AFTER `update_time`; + +ALTER TABLE `flow_instance` + ADD COLUMN `update_by` varchar(64) NULL DEFAULT NULL COMMENT '更新人' AFTER `update_time`; + +ALTER TABLE `flow_task` + ADD COLUMN `create_by` varchar(64) NULL DEFAULT NULL COMMENT '创建人' AFTER `create_time`, + ADD COLUMN `update_by` varchar(64) NULL DEFAULT NULL COMMENT '更新人' AFTER `update_time`; + +ALTER TABLE `flow_user` + ADD COLUMN `update_by` varchar(64) NULL DEFAULT NULL COMMENT '更新人' AFTER `update_time`;