mirror of
https://gitee.com/dromara/RuoYi-Vue-Plus.git
synced 2026-11-02 13:31:49 +08:00
升级warm-flow到2.1.0
This commit is contained in:
parent
7734dd535c
commit
8e5c3c9c9e
2
pom.xml
2
pom.xml
@ -62,7 +62,7 @@
|
||||
<!-- SMS 配置 -->
|
||||
<sms4j.version>3.3.5</sms4j.version>
|
||||
<!-- 工作流配置 -->
|
||||
<warm-flow.version>2.0.1</warm-flow.version>
|
||||
<warm-flow.version>2.1.0</warm-flow.version>
|
||||
<liteflow.version>2.16.2.1</liteflow.version>
|
||||
<!-- mqtt客户端 -->
|
||||
<mica-mqtt.version>2.6.12</mica-mqtt.version>
|
||||
|
||||
@ -100,7 +100,7 @@ spring:
|
||||
driverClassName: com.mysql.cj.jdbc.Driver
|
||||
# jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562
|
||||
# rewriteBatchedStatements=true 批处理优化 大幅提升批量插入更新删除性能(对数据库有性能损耗 使用批量操作应考虑性能问题)
|
||||
url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
|
||||
url: jdbc:mysql://localhost:3306/ry-vue1?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
|
||||
username: root
|
||||
password: root
|
||||
# # 从库数据源
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
# 开发环境配置
|
||||
server:
|
||||
# 服务器的HTTP端口,默认为8080
|
||||
port: 8080
|
||||
port: 17083
|
||||
servlet:
|
||||
# 应用的访问路径
|
||||
context-path: /
|
||||
@ -243,6 +243,9 @@ warm-flow:
|
||||
node-tooltip: true
|
||||
# 默认Authorization,如果有多个token,用逗号分隔
|
||||
token-name: ${sa-token.token-name},clientid
|
||||
# 是否开启定时/事件引擎线程(默认false)。开启后常驻扫描线程池,
|
||||
# 已发布的「定时启动」流程定义会按配置自动发起实例
|
||||
timer-enabled: true
|
||||
|
||||
--- # LiteFlow 业务规则编排
|
||||
liteflow:
|
||||
|
||||
BIN
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/.DS_Store
vendored
Normal file
BIN
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/.DS_Store
vendored
Normal file
Binary file not shown.
@ -83,11 +83,6 @@ public interface FlowConstant {
|
||||
*/
|
||||
String WF_TASK_STATUS = "wf_task_status";
|
||||
|
||||
/**
|
||||
* 自动通过变量标识。
|
||||
*/
|
||||
String AUTO_PASS = "autoPass";
|
||||
|
||||
/**
|
||||
* 业务编码流程变量名。
|
||||
*/
|
||||
|
||||
@ -1,32 +0,0 @@
|
||||
package org.dromara.workflow.common.enums;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* 抄送设置枚举
|
||||
*
|
||||
* @author AprilWind
|
||||
*/
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum CopySettingEnum implements NodeExtEnum {
|
||||
;
|
||||
|
||||
/**
|
||||
* 展示名称。
|
||||
*/
|
||||
private final String label;
|
||||
|
||||
/**
|
||||
* 配置值。
|
||||
*/
|
||||
private final String value;
|
||||
|
||||
/**
|
||||
* 是否默认选中。
|
||||
*/
|
||||
private final boolean selected;
|
||||
|
||||
}
|
||||
|
||||
@ -1,115 +0,0 @@
|
||||
package org.dromara.workflow.common.enums;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 任务状态枚举
|
||||
*
|
||||
* @author may
|
||||
*/
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum TaskStatusEnum {
|
||||
|
||||
/**
|
||||
* 撤销
|
||||
*/
|
||||
CANCEL("cancel", "撤销"),
|
||||
|
||||
/**
|
||||
* 通过
|
||||
*/
|
||||
PASS("pass", "通过"),
|
||||
|
||||
/**
|
||||
* 待审核
|
||||
*/
|
||||
WAITING("waiting", "待审核"),
|
||||
|
||||
/**
|
||||
* 作废
|
||||
*/
|
||||
INVALID("invalid", "作废"),
|
||||
|
||||
/**
|
||||
* 退回
|
||||
*/
|
||||
BACK("back", "退回"),
|
||||
|
||||
/**
|
||||
* 终止
|
||||
*/
|
||||
TERMINATION("termination", "终止"),
|
||||
|
||||
/**
|
||||
* 转办
|
||||
*/
|
||||
TRANSFER("transfer", "转办"),
|
||||
|
||||
/**
|
||||
* 委托
|
||||
*/
|
||||
DEPUTE("depute", "委托"),
|
||||
|
||||
/**
|
||||
* 抄送
|
||||
*/
|
||||
COPY("copy", "抄送"),
|
||||
|
||||
/**
|
||||
* 加签
|
||||
*/
|
||||
SIGN("sign", "加签"),
|
||||
|
||||
/**
|
||||
* 减签
|
||||
*/
|
||||
SIGN_OFF("sign_off", "减签"),
|
||||
|
||||
/**
|
||||
* 超时
|
||||
*/
|
||||
TIMEOUT("timeout", "超时");
|
||||
|
||||
/**
|
||||
* 状态编码与描述缓存。
|
||||
*/
|
||||
private static final Map<String, String> STATUS_DESC_MAP = Arrays.stream(values())
|
||||
.collect(Collectors.toConcurrentMap(TaskStatusEnum::getStatus, TaskStatusEnum::getDesc));
|
||||
/**
|
||||
* 状态
|
||||
*/
|
||||
private final String status;
|
||||
/**
|
||||
* 状态描述。
|
||||
*/
|
||||
private final String desc;
|
||||
|
||||
/**
|
||||
* 根据状态编码获取任务业务状态描述。
|
||||
*
|
||||
* @param status 状态
|
||||
* @return 状态描述
|
||||
*/
|
||||
public static String findByStatus(String status) {
|
||||
// 从缓存中直接获取描述
|
||||
return STATUS_DESC_MAP.getOrDefault(status, StrUtil.EMPTY);
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断状态是否为通过或退回
|
||||
*
|
||||
* @param status 状态值
|
||||
* @return true 表示是通过或退回状态
|
||||
*/
|
||||
public static boolean isPassOrBack(String status) {
|
||||
return PASS.getStatus().equals(status) || BACK.getStatus().equals(status);
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,32 @@
|
||||
package org.dromara.workflow.demo;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.warm.flow.core.service.task.ServiceTaskContext;
|
||||
import org.dromara.warm.flow.core.service.task.ServiceTaskHandler;
|
||||
import org.dromara.workflow.common.ConditionalOnEnable;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* 服务任务示例:class 模式
|
||||
* <p>
|
||||
* 节点配置 {@code node_config.serviceTask} 里写 {@code {"type":"class","handler":"本类全名"}},
|
||||
* 引擎先按全名从容器取 Bean,取不到才反射新建实例,所以注册成 Bean 后可以注入其它服务。
|
||||
*
|
||||
* @author may
|
||||
*/
|
||||
@ConditionalOnEnable
|
||||
@Slf4j
|
||||
@Component
|
||||
public class DemoClassServiceTask implements ServiceTaskHandler {
|
||||
|
||||
@Override
|
||||
public void execute(ServiceTaskContext context) {
|
||||
log.info("服务任务[class 模式]开始执行: instanceId={}, nodeCode={}, nodeName={}",
|
||||
context.getInstance().getId(), context.getNode().getNodeCode(), context.getNode().getNodeName());
|
||||
context.setVariable("classTaskNode", context.getNode().getNodeCode());
|
||||
context.setVariable("classTaskResult", "class模式已执行");
|
||||
log.info("服务任务[class 模式]执行完成: instanceId={}, nodeCode={}",
|
||||
context.getInstance().getId(), context.getNode().getNodeCode());
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,38 @@
|
||||
package org.dromara.workflow.demo;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.warm.flow.core.service.task.ServiceTaskContext;
|
||||
import org.dromara.warm.flow.core.service.task.ServiceTaskHandler;
|
||||
import org.dromara.workflow.common.ConditionalOnEnable;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* 服务任务示例:delegateExpression 模式
|
||||
* <p>
|
||||
* 节点配置写 {@code {"type":"delegateExpression","expression":"#{@demoDelegateServiceTask}"}},
|
||||
* 引擎按 SpEL 从容器取出本 Bean 后调用 {@code execute}。Bean 名即表达式里的名字,改名会打断已发布的定义。
|
||||
*
|
||||
* @author may
|
||||
*/
|
||||
@ConditionalOnEnable
|
||||
@Slf4j
|
||||
@Component("demoDelegateServiceTask")
|
||||
@RequiredArgsConstructor
|
||||
public class DemoDelegateServiceTask implements ServiceTaskHandler {
|
||||
|
||||
private final DemoOrderService demoOrderService;
|
||||
|
||||
@Override
|
||||
public void execute(ServiceTaskContext context) {
|
||||
log.info("服务任务[delegateExpression 模式]开始执行: instanceId={}, nodeCode={}",
|
||||
context.getInstance().getId(), context.getNode().getNodeCode());
|
||||
String orderNo = demoOrderService.createOrder(context);
|
||||
context.setVariable("delegateTaskOrderNo", orderNo);
|
||||
context.setVariable("delegateTaskResult", StringUtils.format("delegateExpression模式已执行, 单号={}", orderNo));
|
||||
log.info("服务任务[delegateExpression 模式]执行完成: instanceId={}, orderNo={}",
|
||||
context.getInstance().getId(), orderNo);
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,60 @@
|
||||
package org.dromara.workflow.demo;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.warm.flow.core.service.task.ServiceTaskContext;
|
||||
import org.dromara.workflow.common.ConditionalOnEnable;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.concurrent.atomic.AtomicLong;
|
||||
|
||||
/**
|
||||
* 服务任务示例:expression 模式的被调用方
|
||||
* <p>
|
||||
* 节点配置写 {@code {"type":"expression","expression":"#{@demoOrderService.createOrder(#execution)}",
|
||||
* "resultVariable":"orderNo"}},{@code #execution} 就是引擎传入的 {@link ServiceTaskContext},
|
||||
* 返回值按 {@code resultVariable} 写回流程变量。
|
||||
*
|
||||
* @author may
|
||||
*/
|
||||
@ConditionalOnEnable
|
||||
@Slf4j
|
||||
@Component("demoOrderService")
|
||||
public class DemoOrderService {
|
||||
|
||||
/**
|
||||
* 示例单号序列,仅用于演示“服务任务产出变量供后续网关判断”,非业务落库。
|
||||
*/
|
||||
private final AtomicLong sequence = new AtomicLong(1000L);
|
||||
|
||||
/**
|
||||
* 生成示例业务单号。
|
||||
*
|
||||
* @param context 服务任务上下文
|
||||
* @return 示例单号
|
||||
*/
|
||||
public String createOrder(ServiceTaskContext context) {
|
||||
log.info("服务任务[expression 模式]开始执行: instanceId={}, nodeCode={}",
|
||||
context.getInstance().getId(), context.getNode().getNodeCode());
|
||||
context.setVariable("expressionTaskNode", context.getNode().getNodeCode());
|
||||
context.setVariable("expressionTaskResult", "expression模式已执行");
|
||||
String orderNo = "SO" + sequence.incrementAndGet();
|
||||
log.info("服务任务[expression 模式]执行完成: instanceId={}, nodeCode={}, orderNo={}",
|
||||
context.getInstance().getId(), context.getNode().getNodeCode(), orderNo);
|
||||
return orderNo;
|
||||
}
|
||||
|
||||
/**
|
||||
* 按入参变量算请假天数,产出变量供后面的网关条件(如 {@code gt@@day|3})判断。
|
||||
*
|
||||
* @param context 服务任务上下文
|
||||
* @return 天数
|
||||
*/
|
||||
public Integer evalDay(ServiceTaskContext context) {
|
||||
Object inputDay = context.getVariable("inputDay");
|
||||
int day = inputDay == null ? 5 : Integer.parseInt(String.valueOf(inputDay));
|
||||
log.info("服务任务[expression 模式]计算天数: instanceId={}, nodeCode={}, inputDay={}, day={}",
|
||||
context.getInstance().getId(), context.getNode().getNodeCode(), inputDay, day);
|
||||
return day;
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,96 @@
|
||||
package org.dromara.workflow.demo;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.warm.flow.core.FlowEngine;
|
||||
import org.dromara.warm.flow.core.entity.Instance;
|
||||
import org.dromara.warm.flow.core.entity.Task;
|
||||
import org.dromara.warm.flow.core.spi.Listener;
|
||||
import org.dromara.warm.flow.core.spi.ListenerVariable;
|
||||
import org.dromara.workflow.common.ConditionalOnEnable;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 付款失败善后监听器(示例)
|
||||
* <p>
|
||||
* 挂在「财务执行付款」节点的 create 监听上:付款金额超过限额就调 {@code TaskService#throwError}
|
||||
* 抛出 {@code PAY_FAILED},由流程定义上的错误边界捕获并走善后分支。金额先取本次办理变量,
|
||||
* 取不到再回落实例变量,因为监听器可能在变量合并前触发。
|
||||
* <p>
|
||||
* 节点监听器配置里写的是本类全名,改包名或类名要同步改已发布的流程定义。
|
||||
*
|
||||
* @author may
|
||||
*/
|
||||
@ConditionalOnEnable
|
||||
@Slf4j
|
||||
@Component
|
||||
public class DemoPayFailListener implements Listener {
|
||||
|
||||
/**
|
||||
* 付款金额变量名。
|
||||
*/
|
||||
public static final String VAR_PAY_AMOUNT = "payAmount";
|
||||
|
||||
/**
|
||||
* 免审限额,超过即视为付款失败需善后。
|
||||
*/
|
||||
public static final BigDecimal PAY_AMOUNT_LIMIT = new BigDecimal("1000");
|
||||
|
||||
/**
|
||||
* 错误码,需与流程定义上错误边界的错误码一致。
|
||||
*/
|
||||
public static final String ERROR_CODE_PAY_FAILED = "PAY_FAILED";
|
||||
|
||||
@Override
|
||||
public void notify(ListenerVariable listenerVariable) {
|
||||
Task task = listenerVariable == null ? null : listenerVariable.getTask();
|
||||
if (task == null || task.getId() == null) {
|
||||
return;
|
||||
}
|
||||
BigDecimal amount = readPayAmount(listenerVariable);
|
||||
if (amount == null || amount.compareTo(PAY_AMOUNT_LIMIT) <= 0) {
|
||||
return;
|
||||
}
|
||||
log.info("付款金额 {} 超过限额 {},抛出 {} 转入错误边界: instanceId={}, taskId={}",
|
||||
amount, PAY_AMOUNT_LIMIT, ERROR_CODE_PAY_FAILED, task.getInstanceId(), task.getId());
|
||||
FlowEngine.taskService().throwError(task.getId(), ERROR_CODE_PAY_FAILED,
|
||||
"付款金额 " + amount.toPlainString() + " 超过限额 " + PAY_AMOUNT_LIMIT.toPlainString() + ",转入善后处理");
|
||||
}
|
||||
|
||||
/**
|
||||
* 先取本次办理的变量,取不到再回落实例变量。
|
||||
*
|
||||
* @param listenerVariable 监听器变量
|
||||
* @return 付款金额,未配置时返回 {@code null}
|
||||
*/
|
||||
private BigDecimal readPayAmount(ListenerVariable listenerVariable) {
|
||||
BigDecimal amount = parseAmount(listenerVariable.getVariable());
|
||||
if (amount != null) {
|
||||
return amount;
|
||||
}
|
||||
Instance instance = listenerVariable.getInstance();
|
||||
return parseAmount(instance == null ? null : instance.getVariableMap());
|
||||
}
|
||||
|
||||
/**
|
||||
* 从变量集合里解析金额,非法值按未配置处理。
|
||||
*
|
||||
* @param variable 变量集合
|
||||
* @return 付款金额,解析失败返回 {@code null}
|
||||
*/
|
||||
private BigDecimal parseAmount(Map<String, Object> variable) {
|
||||
if (variable == null || variable.get(VAR_PAY_AMOUNT) == null) {
|
||||
return null;
|
||||
}
|
||||
String value = String.valueOf(variable.get(VAR_PAY_AMOUNT));
|
||||
if (!StringUtils.isNumeric(value)) {
|
||||
log.warn("流程变量 {} 不是数字,跳过付款校验: {}", VAR_PAY_AMOUNT, value);
|
||||
return null;
|
||||
}
|
||||
return new BigDecimal(value);
|
||||
}
|
||||
|
||||
}
|
||||
@ -30,9 +30,5 @@ public class CompleteTaskContext {
|
||||
*/
|
||||
private Instance instance;
|
||||
|
||||
/**
|
||||
* 流程实例是否开启自动审批,由参数构建节点从实例变量中解析。
|
||||
*/
|
||||
private Boolean autoPass;
|
||||
|
||||
}
|
||||
|
||||
@ -64,12 +64,12 @@ public class FlowHisTaskVo implements Serializable {
|
||||
private Long taskId;
|
||||
|
||||
/**
|
||||
* 协作方式(1审批 2转办 3委派 4会签 5票签 6加签 7减签)
|
||||
* 协作方式(none无 transfer转办 delegate委派 add_signer加签 remove_signer减签)
|
||||
*/
|
||||
private Integer cooperateType;
|
||||
private String cooperateType;
|
||||
|
||||
/**
|
||||
* 协作方式(1审批 2转办 3委派 4会签 5票签 6加签 7减签)
|
||||
* 协作方式展示名,由 cooperateType 翻译而来
|
||||
*/
|
||||
private String cooperateTypeName;
|
||||
|
||||
@ -246,7 +246,7 @@ public class FlowHisTaskVo implements Serializable {
|
||||
/**
|
||||
* 设置协作方式,并通过协作方式获取名称
|
||||
*/
|
||||
public void setCooperateType(Integer cooperateType) {
|
||||
public void setCooperateType(String cooperateType) {
|
||||
this.cooperateType = cooperateType;
|
||||
this.cooperateTypeName = CooperateType.getValueByKey(cooperateType);
|
||||
}
|
||||
|
||||
@ -6,7 +6,6 @@ import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* Node 扩展属性解析结果 VO
|
||||
@ -28,13 +27,6 @@ public class NodeExtVo implements Serializable {
|
||||
*/
|
||||
private List<ButtonPermissionVo> buttonPermissions;
|
||||
|
||||
/**
|
||||
* 抄送对象 ID 集合
|
||||
* <p>
|
||||
* 根据扩展属性中 CopySettingEnum 类型的数据生成,存储需要抄送的对象 ID
|
||||
*/
|
||||
private Set<String> copySettings;
|
||||
|
||||
/**
|
||||
* 自定义参数 Map
|
||||
* <p>
|
||||
|
||||
@ -73,4 +73,9 @@ public class TestLeaveVo implements Serializable {
|
||||
@ExcelProperty(value = "状态")
|
||||
private String status;
|
||||
|
||||
/**
|
||||
* 流程定义编码(已有流程实例时回显,供修改后重新提交沿用)
|
||||
*/
|
||||
private String flowCode;
|
||||
|
||||
}
|
||||
|
||||
@ -0,0 +1,33 @@
|
||||
package org.dromara.workflow.handler;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.warm.flow.core.service.event.EventMessage;
|
||||
import org.dromara.warm.flow.core.service.event.EventPublisher;
|
||||
import org.dromara.workflow.common.ConditionalOnEnable;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* 流程消息事件的宿主发布器
|
||||
* <p>
|
||||
* 引擎在 {@code MESSAGE_THROW} / {@code MESSAGE_END} 时经 {@code FlowEngine.eventPublisher()}
|
||||
* (即容器里唯一的 {@link EventPublisher} Bean)把消息交出来。没有这个 Bean 时引擎只会告警并跳过,
|
||||
* 消息事件看起来“配了但没生效”。
|
||||
* <p>
|
||||
* 当前实现只落日志,够演示与排查用;接真实中间件时在这里改成发 MQ / 调用外部接口,
|
||||
* 注意本方法与流程状态更新在同一事务边界内,需要可靠投递请自行引入 Outbox。
|
||||
*
|
||||
* @author may
|
||||
*/
|
||||
@ConditionalOnEnable
|
||||
@Slf4j
|
||||
@Component
|
||||
public class WorkflowEventPublisher implements EventPublisher {
|
||||
|
||||
@Override
|
||||
public void publish(EventMessage message) {
|
||||
log.info("收到流程消息事件: eventName={}, eventType={}, definitionId={}, instanceId={}, nodeCode={}, payload={}",
|
||||
message.getEventName(), message.getEventType(), message.getDefinitionId(), message.getInstanceId(),
|
||||
message.getNodeCode(), message.getPayload());
|
||||
}
|
||||
|
||||
}
|
||||
@ -8,7 +8,7 @@ import org.dromara.common.core.utils.StreamUtils;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.common.satoken.utils.LoginHelper;
|
||||
import org.dromara.system.api.domain.UserDTO;
|
||||
import org.dromara.warm.flow.core.handler.PermissionHandler;
|
||||
import org.dromara.warm.flow.core.spi.PermissionHandler;
|
||||
import org.dromara.workflow.common.ConditionalOnEnable;
|
||||
import org.dromara.workflow.service.IFlwTaskAssigneeService;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@ -1,7 +1,6 @@
|
||||
package org.dromara.workflow.listener;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import cn.hutool.core.lang.TypeReference;
|
||||
import cn.hutool.core.map.MapUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
@ -9,19 +8,17 @@ import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.common.core.enums.BusinessStatusEnum;
|
||||
import org.dromara.common.core.utils.SpringUtils;
|
||||
import org.dromara.common.core.utils.StreamUtils;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.system.api.UserService;
|
||||
import org.dromara.warm.flow.core.FlowEngine;
|
||||
import org.dromara.warm.flow.core.workflow.context.WorkflowContext;
|
||||
import org.dromara.warm.flow.core.entity.Definition;
|
||||
import org.dromara.warm.flow.core.entity.Instance;
|
||||
import org.dromara.warm.flow.core.entity.Task;
|
||||
import org.dromara.warm.flow.core.listener.GlobalListener;
|
||||
import org.dromara.warm.flow.core.listener.ListenerVariable;
|
||||
import org.dromara.warm.flow.core.enums.TaskStatus;
|
||||
import org.dromara.warm.flow.core.spi.GlobalListener;
|
||||
import org.dromara.warm.flow.core.spi.ListenerVariable;
|
||||
import org.dromara.workflow.common.ConditionalOnEnable;
|
||||
import org.dromara.workflow.common.constant.FlowConstant;
|
||||
import org.dromara.workflow.common.enums.TaskStatusEnum;
|
||||
import org.dromara.workflow.domain.bo.FlowCopyBo;
|
||||
import org.dromara.workflow.domain.vo.NodeExtVo;
|
||||
import org.dromara.workflow.event.WorkflowCopyEvent;
|
||||
@ -37,7 +34,6 @@ import org.springframework.stereotype.Component;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* 工作流全局监听器,处理任务流转中的扩展变量、消息和事件发布。
|
||||
@ -55,7 +51,6 @@ public class WorkflowGlobalListener implements GlobalListener {
|
||||
private final FlowProcessEventHandler flowProcessEventHandler;
|
||||
private final IFlwCommonService flwCommonService;
|
||||
private final IFlwNodeExtService nodeExtService;
|
||||
private final UserService userService;
|
||||
|
||||
/**
|
||||
* 任务创建回调,当前预留扩展。
|
||||
@ -81,20 +76,6 @@ public class WorkflowGlobalListener implements GlobalListener {
|
||||
variable = new HashMap<>();
|
||||
}
|
||||
NodeExtVo nodeExt = nodeExtService.parseNodeExt(ext, variable);
|
||||
Set<String> copyList = nodeExt.getCopySettings();
|
||||
if (CollUtil.isNotEmpty(copyList)) {
|
||||
List<Long> userIds = StreamUtils.toList(copyList, Convert::toLong);
|
||||
Map<Long, String> nickNameMap = userService.selectUserNicksByIds(userIds);
|
||||
List<FlowCopyBo> list = StreamUtils.toList(copyList, x -> {
|
||||
FlowCopyBo bo = new FlowCopyBo();
|
||||
Long id = Convert.toLong(x);
|
||||
bo.setUserId(id);
|
||||
bo.setNickName(nickNameMap.getOrDefault(id, StringUtils.EMPTY));
|
||||
return bo;
|
||||
});
|
||||
// 节点配置仅作为默认值,保留本次办理显式提交的抄送人或空名单。
|
||||
variable.putIfAbsent(FlowConstant.FLOW_COPY_LIST, list);
|
||||
}
|
||||
if (CollUtil.isNotEmpty(nodeExt.getVariables())) {
|
||||
variable.putAll(nodeExt.getVariables());
|
||||
}
|
||||
@ -120,9 +101,9 @@ public class WorkflowGlobalListener implements GlobalListener {
|
||||
String nodeCode = flowTask.getNodeCode();
|
||||
|
||||
// 处理办理或退回时指定办理人的情况
|
||||
if (TaskStatusEnum.PASS.getStatus().equals(taskStatus)) {
|
||||
if (TaskStatus.PASS.getKey().equals(taskStatus)) {
|
||||
processTaskPermission(variable, flowTask, taskStatus);
|
||||
} else if (TaskStatusEnum.BACK.getStatus().equals(taskStatus)) {
|
||||
} else if (TaskStatus.BACK.getKey().equals(taskStatus)) {
|
||||
processTaskPermission(variable, flowTask, taskStatus);
|
||||
}
|
||||
|
||||
@ -163,7 +144,7 @@ public class WorkflowGlobalListener implements GlobalListener {
|
||||
List<String> userIdList = StringUtils.str2List(userIds, StringUtils.SEPARATOR, true, true);
|
||||
if (CollUtil.isNotEmpty(userIdList)) {
|
||||
flowTask.setPermissionList(userIdList);
|
||||
if (TaskStatusEnum.PASS.getStatus().equals(taskStatus)) {
|
||||
if (TaskStatus.PASS.getKey().equals(taskStatus)) {
|
||||
// 办理指定人变量只消费一次;驳回指定人变量需要保留给后续重复驳回。
|
||||
variable.remove(nodeKey);
|
||||
FlowEngine.insService().removeVariables(flowTask.getInstanceId(), nodeKey);
|
||||
@ -228,7 +209,7 @@ public class WorkflowGlobalListener implements GlobalListener {
|
||||
return;
|
||||
}
|
||||
// 只有办理或者退回的时候才执行消息通知和抄送
|
||||
if (!TaskStatusEnum.isPassOrBack(workflowContext.getTaskStatus())) {
|
||||
if (!isPassOrBack(workflowContext.getTaskStatus())) {
|
||||
return;
|
||||
}
|
||||
if (ObjectUtil.isNull(variable)) {
|
||||
@ -267,7 +248,7 @@ public class WorkflowGlobalListener implements GlobalListener {
|
||||
* @return 是否发送待办消息
|
||||
*/
|
||||
private boolean shouldSendTaskMessage(WorkflowContext workflowContext, Definition definition, List<Task> nextTasks) {
|
||||
if (workflowContext == null || !TaskStatusEnum.BACK.getStatus().equals(workflowContext.getTaskStatus())) {
|
||||
if (workflowContext == null || !TaskStatus.BACK.getKey().equals(workflowContext.getTaskStatus())) {
|
||||
return true;
|
||||
}
|
||||
if (CollUtil.isEmpty(nextTasks) || nextTasks.size() != 1) {
|
||||
@ -302,6 +283,16 @@ public class WorkflowGlobalListener implements GlobalListener {
|
||||
SpringUtils.context().publishEvent(new WorkflowResultMessageEvent(definition.getFlowName(), status, instance.getCreateBy(), messageType));
|
||||
}
|
||||
|
||||
/**
|
||||
* 任务收口是否为「通过」或「退回」,只有这两种结果才触发消息通知与抄送。
|
||||
*
|
||||
* @param taskStatus 任务状态编码
|
||||
* @return 是否为通过或退回
|
||||
*/
|
||||
private boolean isPassOrBack(String taskStatus) {
|
||||
return TaskStatus.PASS.getKey().equals(taskStatus) || TaskStatus.BACK.getKey().equals(taskStatus);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据流程实例确定最终状态
|
||||
*
|
||||
|
||||
@ -1,94 +0,0 @@
|
||||
package org.dromara.workflow.liteflow.complete;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.yomahub.liteflow.annotation.LiteflowComponent;
|
||||
import com.yomahub.liteflow.core.NodeComponent;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.dromara.common.core.utils.StreamUtils;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.common.mybatis.core.query.QueryBuilder;
|
||||
import org.dromara.common.satoken.utils.LoginHelper;
|
||||
import org.dromara.warm.flow.core.FlowEngine;
|
||||
import org.dromara.warm.flow.core.workflow.command.CompleteCommand;
|
||||
import org.dromara.warm.flow.core.workflow.context.OperatorContext;
|
||||
import org.dromara.warm.flow.core.entity.User;
|
||||
import org.dromara.warm.flow.orm.entity.FlowTask;
|
||||
import org.dromara.warm.flow.orm.mapper.FlowTaskMapper;
|
||||
import org.dromara.workflow.common.ConditionalOnEnable;
|
||||
import org.dromara.workflow.common.enums.TaskStatusEnum;
|
||||
import org.dromara.workflow.domain.context.CompleteTaskContext;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.dromara.workflow.common.constant.FlowConstant.*;
|
||||
|
||||
/**
|
||||
* 执行当前处理人的后续自动审批。
|
||||
* <p>
|
||||
* 仅当流程实例开启自动审批时生效,用于连续跳过同一登录人负责的后续待办任务。
|
||||
*
|
||||
* @author may
|
||||
*/
|
||||
@ConditionalOnEnable
|
||||
@RequiredArgsConstructor
|
||||
@LiteflowComponent("completeAutoPass")
|
||||
public class CompleteAutoPassComponent extends NodeComponent {
|
||||
|
||||
private final FlowTaskMapper flowTaskMapper;
|
||||
|
||||
@Override
|
||||
public void process() {
|
||||
CompleteTaskContext context = getContextBean(CompleteTaskContext.class);
|
||||
FlowTask flowTask = context.getFlowTask();
|
||||
autoPass(flowTask.getId(), flowTask.getInstanceId());
|
||||
}
|
||||
|
||||
/**
|
||||
* 递归跳过当前处理人的后续任务。
|
||||
*
|
||||
* @param taskId 本轮已处理任务 id,用于避免重复跳过同一任务
|
||||
* @param instanceId 流程实例 id
|
||||
*/
|
||||
private void autoPass(Long taskId, Long instanceId) {
|
||||
List<FlowTask> flowTaskList = selectByInstId(instanceId);
|
||||
if (CollUtil.isEmpty(flowTaskList)) {
|
||||
return;
|
||||
}
|
||||
List<User> userList = FlowEngine.userService()
|
||||
.getByAssociateds(StreamUtils.toList(flowTaskList, FlowTask::getId));
|
||||
if (CollUtil.isEmpty(userList)) {
|
||||
return;
|
||||
}
|
||||
for (FlowTask task : flowTaskList) {
|
||||
if (task.getId().equals(taskId)) {
|
||||
continue;
|
||||
}
|
||||
// 自动审批只处理当前登录人仍是办理人的后续任务,避免替其他候选人或并行分支误审批。
|
||||
List<User> users = StreamUtils.filter(userList,
|
||||
e -> ObjectUtil.equals(task.getId(), e.getAssociated()) && ObjectUtil.equal(e.getProcessedBy(), LoginHelper.getUserIdStr()));
|
||||
if (CollUtil.isEmpty(users)) {
|
||||
continue;
|
||||
}
|
||||
// 自动审批不继承人工办理时的抄送和消息通知,避免重复发送业务消息。
|
||||
CompleteCommand command = new CompleteCommand();
|
||||
command.setOperator(new OperatorContext(LoginHelper.getUserIdStr()));
|
||||
command.setTaskId(task.getId());
|
||||
command.setMessage("流程引擎自动审批!");
|
||||
command.setVariables(Map.of(SUBMIT, false, FLOW_COPY_LIST, Collections.emptyList(), MESSAGE_NOTICE, StringUtils.EMPTY));
|
||||
command.setTaskStatus(TaskStatusEnum.PASS.getStatus());
|
||||
FlowEngine.workflow().complete(command);
|
||||
// 跳过后可能生成新的后续任务,继续扫描直到当前登录人不再有可自动办理任务。
|
||||
autoPass(task.getId(), instanceId);
|
||||
}
|
||||
}
|
||||
|
||||
private List<FlowTask> selectByInstId(Long instanceId) {
|
||||
return flowTaskMapper.selectList(QueryBuilder.lambda(FlowTask.class)
|
||||
.eq(FlowTask::getInstanceId, instanceId)
|
||||
.build());
|
||||
}
|
||||
|
||||
}
|
||||
@ -4,12 +4,11 @@ import cn.hutool.core.convert.Convert;
|
||||
import com.yomahub.liteflow.annotation.LiteflowComponent;
|
||||
import com.yomahub.liteflow.core.NodeComponent;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.dromara.common.core.enums.BusinessStatusEnum;
|
||||
import org.dromara.warm.flow.core.FlowEngine;
|
||||
import org.dromara.warm.flow.core.enums.TaskStatus;
|
||||
import org.dromara.warm.flow.core.workflow.command.CompleteCommand;
|
||||
import org.dromara.warm.flow.core.workflow.context.OperatorContext;
|
||||
import org.dromara.workflow.common.ConditionalOnEnable;
|
||||
import org.dromara.workflow.common.enums.TaskStatusEnum;
|
||||
import org.dromara.workflow.domain.bo.CompleteTaskBo;
|
||||
import org.dromara.workflow.domain.context.CompleteTaskContext;
|
||||
|
||||
@ -40,9 +39,9 @@ public class CompleteExecuteComponent extends NodeComponent {
|
||||
command.setVariables(variables);
|
||||
command.setMessage(completeTaskBo.getMessage());
|
||||
command.setExt(completeTaskBo.getFileId());
|
||||
command.setFlowStatus(BusinessStatusEnum.WAITING.getStatus());
|
||||
command.setTaskStatus(TaskStatusEnum.PASS.getStatus());
|
||||
context.setAutoPass(Convert.toBool(context.getInstance().getVariableMap().getOrDefault(AUTO_PASS, false)));
|
||||
// 全局监听器用 context.taskStatus 判断「通过/退回」,才决定要不要抄送与发通知;
|
||||
// 引擎不会把解析后的状态回填进调用上下文,办理路径不显式声明 PASS 就会静默跳过抄送。
|
||||
command.setTaskStatus(TaskStatus.PASS.getKey());
|
||||
FlowEngine.workflow().complete(command);
|
||||
}
|
||||
|
||||
|
||||
@ -1,23 +0,0 @@
|
||||
package org.dromara.workflow.liteflow.complete;
|
||||
|
||||
import com.yomahub.liteflow.annotation.LiteflowComponent;
|
||||
import com.yomahub.liteflow.core.NodeBooleanComponent;
|
||||
import org.dromara.workflow.common.ConditionalOnEnable;
|
||||
import org.dromara.workflow.domain.context.CompleteTaskContext;
|
||||
|
||||
/**
|
||||
* 判断办理任务后是否进入自动审批分支。
|
||||
*
|
||||
* @author may
|
||||
*/
|
||||
@ConditionalOnEnable
|
||||
@LiteflowComponent("completeNeedAutoPass")
|
||||
public class CompleteNeedAutoPassComponent extends NodeBooleanComponent {
|
||||
|
||||
@Override
|
||||
public boolean processBoolean() {
|
||||
CompleteTaskContext context = getContextBean(CompleteTaskContext.class);
|
||||
return Boolean.TRUE.equals(context.getAutoPass());
|
||||
}
|
||||
|
||||
}
|
||||
@ -9,11 +9,11 @@ import org.dromara.common.core.enums.BusinessStatusEnum;
|
||||
import org.dromara.common.core.exception.ServiceException;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.warm.flow.core.entity.Instance;
|
||||
import org.dromara.warm.flow.core.enums.TaskStatus;
|
||||
import org.dromara.warm.flow.core.service.InsService;
|
||||
import org.dromara.warm.flow.orm.entity.FlowTask;
|
||||
import org.dromara.warm.flow.orm.mapper.FlowTaskMapper;
|
||||
import org.dromara.workflow.common.ConditionalOnEnable;
|
||||
import org.dromara.workflow.common.enums.TaskStatusEnum;
|
||||
import org.dromara.workflow.domain.bo.CompleteTaskBo;
|
||||
import org.dromara.workflow.domain.context.CompleteTaskContext;
|
||||
|
||||
@ -86,12 +86,12 @@ public class CompletePrepareComponent extends NodeComponent {
|
||||
hashSet.addAll(popUserIds);
|
||||
hashSet.addAll(variableUserIds);
|
||||
// Warm-Flow 会按“状态:变量名”读取办理人,正向和退回都写入同一批候选人。
|
||||
map.put(TaskStatusEnum.PASS.getStatus() + StringUtils.COLON + entry.getKey(), StringUtils.joinComma(hashSet));
|
||||
map.put(TaskStatusEnum.BACK.getStatus() + StringUtils.COLON + entry.getKey(), StringUtils.joinComma(hashSet));
|
||||
map.put(TaskStatus.PASS.getKey() + StringUtils.COLON + entry.getKey(), StringUtils.joinComma(hashSet));
|
||||
map.put(TaskStatus.BACK.getKey() + StringUtils.COLON + entry.getKey(), StringUtils.joinComma(hashSet));
|
||||
}
|
||||
} else {
|
||||
map.put(TaskStatusEnum.PASS.getStatus() + StringUtils.COLON + entry.getKey(), entry.getValue());
|
||||
map.put(TaskStatusEnum.BACK.getStatus() + StringUtils.COLON + entry.getKey(), entry.getValue());
|
||||
map.put(TaskStatus.PASS.getKey() + StringUtils.COLON + entry.getKey(), entry.getValue());
|
||||
map.put(TaskStatus.BACK.getKey() + StringUtils.COLON + entry.getKey(), entry.getValue());
|
||||
}
|
||||
}
|
||||
return map;
|
||||
|
||||
@ -7,13 +7,13 @@ import lombok.RequiredArgsConstructor;
|
||||
import org.dromara.common.core.utils.StreamUtils;
|
||||
import org.dromara.common.mybatis.core.query.QueryBuilder;
|
||||
import org.dromara.warm.flow.core.FlowEngine;
|
||||
import org.dromara.warm.flow.core.enums.TaskStatus;
|
||||
import org.dromara.warm.flow.core.service.InsService;
|
||||
import org.dromara.warm.flow.orm.entity.FlowHisTask;
|
||||
import org.dromara.warm.flow.orm.entity.FlowTask;
|
||||
import org.dromara.warm.flow.orm.mapper.FlowHisTaskMapper;
|
||||
import org.dromara.warm.flow.orm.mapper.FlowTaskMapper;
|
||||
import org.dromara.workflow.common.ConditionalOnEnable;
|
||||
import org.dromara.workflow.common.enums.TaskStatusEnum;
|
||||
import org.dromara.workflow.domain.context.InstanceDeleteContext;
|
||||
|
||||
import java.util.List;
|
||||
@ -56,23 +56,27 @@ public class InstanceDeleteExecuteComponent extends NodeComponent {
|
||||
/**
|
||||
* 删除流程实例产生的抄送人员关联。
|
||||
*
|
||||
* <p>抄送人挂在<b>抄送历史主键</b>上(与引擎 {@code CopyAdvancer} 一致),不是待办主键。
|
||||
* 只有本组件的历史分支需要显式清理——非历史分支走 {@code insService.remove},
|
||||
* 引擎级联里已按历史主键清过一遍。</p>
|
||||
*
|
||||
* @param instanceIds 流程实例 ID 集合
|
||||
*/
|
||||
private void deleteCopyUsers(List<Long> instanceIds) {
|
||||
List<FlowHisTask> copyTasks = flowHisTaskMapper.selectList(QueryBuilder.lambda(FlowHisTask.class)
|
||||
.in(FlowHisTask::getInstanceId, instanceIds)
|
||||
.eq(FlowHisTask::getFlowStatus, TaskStatusEnum.COPY.getStatus())
|
||||
.eq(FlowHisTask::getFlowStatus, TaskStatus.COPY.getKey())
|
||||
.build());
|
||||
if (CollUtil.isEmpty(copyTasks)) {
|
||||
return;
|
||||
}
|
||||
List<Long> copyTaskIds = copyTasks.stream()
|
||||
.map(FlowHisTask::getTaskId)
|
||||
List<Long> copyHisIds = copyTasks.stream()
|
||||
.map(FlowHisTask::getId)
|
||||
.filter(Objects::nonNull)
|
||||
.distinct()
|
||||
.toList();
|
||||
if (CollUtil.isNotEmpty(copyTaskIds)) {
|
||||
FlowEngine.userService().deleteByTaskIds(copyTaskIds);
|
||||
if (CollUtil.isNotEmpty(copyHisIds)) {
|
||||
FlowEngine.userService().deleteByTaskIds(copyHisIds);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -10,7 +10,6 @@ import org.dromara.warm.flow.core.workflow.command.RemoveSignerCommand;
|
||||
import org.dromara.warm.flow.core.workflow.command.TransferCommand;
|
||||
import org.dromara.warm.flow.core.workflow.context.OperatorContext;
|
||||
import org.dromara.workflow.common.ConditionalOnEnable;
|
||||
import org.dromara.workflow.common.enums.TaskStatusEnum;
|
||||
import org.dromara.workflow.domain.context.TaskOperationContext;
|
||||
|
||||
/**
|
||||
@ -37,7 +36,6 @@ public class TaskOpExecuteComponent extends NodeComponent {
|
||||
command.setTaskId(taskId);
|
||||
command.setTargetHandler(context.getTaskOperationBo().getUserId());
|
||||
command.setMessage(message);
|
||||
command.setTaskStatus(TaskStatusEnum.DEPUTE.getStatus());
|
||||
result = FlowEngine.workflow().delegate(command).isSuccess();
|
||||
}
|
||||
case TRANSFER_TASK -> {
|
||||
@ -46,7 +44,6 @@ public class TaskOpExecuteComponent extends NodeComponent {
|
||||
command.setTaskId(taskId);
|
||||
command.setTargetHandler(context.getTaskOperationBo().getUserId());
|
||||
command.setMessage(message);
|
||||
command.setTaskStatus(TaskStatusEnum.TRANSFER.getStatus());
|
||||
result = FlowEngine.workflow().transfer(command).isSuccess();
|
||||
}
|
||||
case ADD_SIGNATURE -> {
|
||||
@ -55,7 +52,6 @@ public class TaskOpExecuteComponent extends NodeComponent {
|
||||
command.setTaskId(taskId);
|
||||
command.setTargetHandlers(context.getTaskOperationBo().getUserIds());
|
||||
command.setMessage(message);
|
||||
command.setTaskStatus(TaskStatusEnum.SIGN.getStatus());
|
||||
result = FlowEngine.workflow().addSigner(command).isSuccess();
|
||||
}
|
||||
case REDUCTION_SIGNATURE -> {
|
||||
@ -64,7 +60,6 @@ public class TaskOpExecuteComponent extends NodeComponent {
|
||||
command.setTaskId(taskId);
|
||||
command.setTargetHandlers(context.getTaskOperationBo().getUserIds());
|
||||
command.setMessage(message);
|
||||
command.setTaskStatus(TaskStatusEnum.SIGN_OFF.getStatus());
|
||||
result = FlowEngine.workflow().removeSigner(command).isSuccess();
|
||||
}
|
||||
}
|
||||
|
||||
@ -9,6 +9,7 @@ import org.dromara.common.core.exception.ServiceException;
|
||||
import org.dromara.warm.flow.core.FlowEngine;
|
||||
import org.dromara.warm.flow.core.entity.Instance;
|
||||
import org.dromara.warm.flow.core.entity.Task;
|
||||
import org.dromara.warm.flow.core.enums.TaskStatus;
|
||||
import org.dromara.warm.flow.core.service.TaskService;
|
||||
import org.dromara.warm.flow.core.workflow.command.StartCommand;
|
||||
import org.dromara.warm.flow.core.workflow.context.OperatorContext;
|
||||
@ -16,7 +17,6 @@ import org.dromara.warm.flow.core.workflow.result.WorkflowResult;
|
||||
import org.dromara.warm.flow.orm.entity.FlowTask;
|
||||
import org.dromara.workflow.api.domain.StartProcessReturnDTO;
|
||||
import org.dromara.workflow.common.ConditionalOnEnable;
|
||||
import org.dromara.workflow.common.enums.TaskStatusEnum;
|
||||
import org.dromara.workflow.domain.FlowInstanceBizExt;
|
||||
import org.dromara.workflow.domain.context.StartProcessContext;
|
||||
import org.dromara.workflow.mapper.FlwInstanceBizExtMapper;
|
||||
@ -45,7 +45,7 @@ public class StartExecuteComponent extends NodeComponent {
|
||||
command.setOperator(new OperatorContext(context.getStartProcessBo().getHandler()));
|
||||
command.setVariables(context.getVariables());
|
||||
command.setFlowStatus(BusinessStatusEnum.DRAFT.getStatus());
|
||||
command.setTaskStatus(TaskStatusEnum.PASS.getStatus());
|
||||
command.setTaskStatus(TaskStatus.PASS.getKey());
|
||||
WorkflowResult result = FlowEngine.workflow().start(command);
|
||||
Instance instance = FlowEngine.insService().getById(result.getInstanceId());
|
||||
context.setInstance(instance);
|
||||
|
||||
@ -1,12 +1,10 @@
|
||||
package org.dromara.workflow.liteflow.start;
|
||||
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import cn.hutool.core.lang.Dict;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.yomahub.liteflow.annotation.LiteflowComponent;
|
||||
import com.yomahub.liteflow.core.NodeComponent;
|
||||
import org.dromara.common.core.exception.ServiceException;
|
||||
import org.dromara.common.json.utils.JsonUtils;
|
||||
import org.dromara.warm.flow.core.FlowEngine;
|
||||
import org.dromara.warm.flow.core.entity.Definition;
|
||||
import org.dromara.workflow.common.ConditionalOnEnable;
|
||||
@ -36,9 +34,6 @@ public class StartPrepareInstanceComponent extends NodeComponent {
|
||||
context.setDefinition(definition);
|
||||
|
||||
Map<String, Object> variables = context.getVariables();
|
||||
Dict dict = JsonUtils.parseMap(definition.getExt());
|
||||
boolean autoPass = !ObjectUtil.isNull(dict) && dict.getBool(AUTO_PASS);
|
||||
variables.put(AUTO_PASS, autoPass);
|
||||
variables.put(BUSINESS_CODE, generateBusinessCode(context.getBizExt()));
|
||||
}
|
||||
|
||||
|
||||
@ -5,10 +5,10 @@ import com.github.yulichang.base.MPJBaseMapper;
|
||||
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
|
||||
import org.dromara.common.mybatis.core.query.QueryBuilder;
|
||||
import org.dromara.warm.flow.core.enums.NodeType;
|
||||
import org.dromara.warm.flow.core.enums.TaskStatus;
|
||||
import org.dromara.warm.flow.orm.entity.FlowDefinition;
|
||||
import org.dromara.warm.flow.orm.entity.FlowHisTask;
|
||||
import org.dromara.warm.flow.orm.entity.FlowInstance;
|
||||
import org.dromara.workflow.common.enums.TaskStatusEnum;
|
||||
import org.dromara.workflow.domain.FlowInstanceBizExt;
|
||||
import org.dromara.workflow.domain.bo.FlowTaskBo;
|
||||
import org.dromara.workflow.domain.vo.FlowHisTaskVo;
|
||||
@ -51,7 +51,7 @@ public interface FlwHisTaskMapper extends BaseMapperPlus<FlowHisTask, FlowHisTas
|
||||
.leftJoin(FlowDefinition.class, "c", FlowDefinition::getId, FlowHisTask::getDefinitionId)
|
||||
.leftJoin(FlowInstanceBizExt.class, "biz", FlowInstanceBizExt::getInstanceId, FlowInstance::getId)
|
||||
.in("a", FlowHisTask::getNodeType, List.of(1, 3, 4))
|
||||
.ne("a", FlowHisTask::getFlowStatus, TaskStatusEnum.COPY.getStatus())
|
||||
.ne("a", FlowHisTask::getFlowStatus, TaskStatus.COPY.getKey())
|
||||
.likeIfText("a", FlowHisTask::getNodeName, bo.getNodeName())
|
||||
.likeIfText("c", FlowDefinition::getFlowName, bo.getFlowName())
|
||||
.likeIfText("c", FlowDefinition::getFlowCode, bo.getFlowCode())
|
||||
|
||||
@ -82,7 +82,7 @@ public interface FlwTaskMapper extends BaseMapperPlus<FlowTask, FlowTaskVo>, MPJ
|
||||
.select("d", FlowDefinition::getFlowName, FlowDefinition::getFlowCode, FlowDefinition::getCategory,
|
||||
FlowDefinition::getVersion)
|
||||
.select("biz", FlowInstanceBizExt::getBusinessCode, FlowInstanceBizExt::getBusinessTitle)
|
||||
.leftJoin(FlowHisTask.class, "b", FlowHisTask::getTaskId, FlowUser::getAssociated)
|
||||
.leftJoin(FlowHisTask.class, "b", FlowHisTask::getId, FlowUser::getAssociated)
|
||||
.leftJoin(FlowInstance.class, "c", FlowInstance::getId, FlowHisTask::getInstanceId)
|
||||
.leftJoin(FlowDefinition.class, "d", FlowDefinition::getId, FlowInstance::getDefinitionId)
|
||||
.leftJoin(FlowInstanceBizExt.class, "biz", FlowInstanceBizExt::getInstanceId, FlowInstance::getId)
|
||||
|
||||
@ -20,6 +20,7 @@ import org.dromara.common.mybatis.core.query.LambdaJoinQueryBuilder;
|
||||
import org.dromara.common.mybatis.core.query.QueryBuilder;
|
||||
import org.dromara.common.satoken.utils.LoginHelper;
|
||||
import org.dromara.warm.flow.core.FlowEngine;
|
||||
import org.dromara.warm.flow.core.enums.TaskStatus;
|
||||
import org.dromara.warm.flow.core.workflow.command.RevokeCommand;
|
||||
import org.dromara.warm.flow.core.workflow.command.TerminateCommand;
|
||||
import org.dromara.warm.flow.core.workflow.context.OperatorContext;
|
||||
@ -39,7 +40,6 @@ import org.dromara.warm.flow.orm.entity.FlowTask;
|
||||
import org.dromara.warm.flow.orm.mapper.FlowHisTaskMapper;
|
||||
import org.dromara.warm.flow.orm.mapper.FlowInstanceMapper;
|
||||
import org.dromara.workflow.common.ConditionalOnEnable;
|
||||
import org.dromara.workflow.common.enums.TaskStatusEnum;
|
||||
import org.dromara.workflow.domain.FlowInstanceBizExt;
|
||||
import org.dromara.workflow.domain.bo.FlowCancelBo;
|
||||
import org.dromara.workflow.domain.bo.FlowInstanceBo;
|
||||
@ -275,7 +275,6 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
|
||||
command.getOperator().setIgnore(true);
|
||||
command.setInstanceId(instance.getId());
|
||||
command.setMessage(bo.message());
|
||||
command.setFlowStatus(BusinessStatusEnum.CANCEL.getStatus());
|
||||
command.setTaskStatus(BusinessStatusEnum.CANCEL.getStatus());
|
||||
FlowEngine.workflow().revoke(command);
|
||||
return true;
|
||||
@ -321,7 +320,8 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
|
||||
Map<Long, List<User>> taskUserMap = StreamUtils.groupByKey(associatedUsers, User::getAssociated);
|
||||
|
||||
for (FlowHisTaskVo vo : runningTaskVos) {
|
||||
vo.setFlowStatus(TaskStatusEnum.WAITING.getStatus());
|
||||
// 状态列保留待办任务自身的 flow_status(pending 待审批 / back 退回),
|
||||
// 不要覆盖成实例维度编码:审批记录用任务字典渲染这一列。
|
||||
vo.setUpdateTime(null);
|
||||
vo.setRunDuration(null);
|
||||
|
||||
@ -462,7 +462,7 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
|
||||
command.setInstanceId(bo.id());
|
||||
command.setMessage(bo.comment());
|
||||
command.setFlowStatus(BusinessStatusEnum.INVALID.getStatus());
|
||||
command.setTaskStatus(TaskStatusEnum.INVALID.getStatus());
|
||||
command.setTaskStatus(TaskStatus.INVALID.getKey());
|
||||
FlowEngine.workflow().terminate(command);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -11,12 +11,10 @@ import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.common.json.utils.JsonUtils;
|
||||
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;
|
||||
import org.dromara.workflow.common.enums.ButtonPermissionEnum;
|
||||
import org.dromara.workflow.common.enums.CopySettingEnum;
|
||||
import org.dromara.workflow.common.enums.NodeExtEnum;
|
||||
import org.dromara.workflow.common.enums.VariablesEnum;
|
||||
import org.dromara.workflow.domain.vo.ButtonPermissionVo;
|
||||
@ -45,14 +43,6 @@ public class FlwNodeExtServiceImpl implements NodeExtService, IFlwNodeExtService
|
||||
|
||||
static {
|
||||
CHILD_NODE_MAP = Map.of(
|
||||
CopySettingEnum.class.getSimpleName(),
|
||||
Map.of(
|
||||
"label", "抄送对象",
|
||||
"type", 5,
|
||||
"must", false,
|
||||
"multiple", false,
|
||||
"desc", "设置该节点的抄送办理人"
|
||||
),
|
||||
VariablesEnum.class.getSimpleName(),
|
||||
Map.of(
|
||||
"label", "自定义参数",
|
||||
@ -84,7 +74,7 @@ public class FlwNodeExtServiceImpl implements NodeExtService, IFlwNodeExtService
|
||||
List<NodeExt> nodeExtList = new ArrayList<>();
|
||||
// 构建基础设置页面
|
||||
nodeExtList.add(buildNodeExt("wf_basic_tab", "基础设置", 1,
|
||||
List.of(CopySettingEnum.class, VariablesEnum.class)));
|
||||
List.of(VariablesEnum.class)));
|
||||
// 构建按钮权限页面
|
||||
nodeExtList.add(buildNodeExt("wf_button_tab", "权限", 2,
|
||||
List.of(ButtonPermissionEnum.class)));
|
||||
@ -192,21 +182,19 @@ public class FlwNodeExtServiceImpl implements NodeExtService, IFlwNodeExtService
|
||||
/**
|
||||
* 解析扩展属性 JSON 并构建 Node 扩展属性对象
|
||||
* <p>
|
||||
* 根据传入的 JSON 字符串,将扩展属性分为三类:
|
||||
* 根据传入的 JSON 字符串,将扩展属性分为两类:
|
||||
* 1. ButtonPermissionEnum:解析为按钮权限列表,标记每个按钮是否勾选
|
||||
* 2. CopySettingEnum:解析为抄送对象 ID 集合
|
||||
* 3. VariablesEnum:解析为自定义参数 Map
|
||||
* 2. VariablesEnum:解析为自定义参数 Map
|
||||
*
|
||||
* <p>示例 JSON:
|
||||
* [
|
||||
* {"code": "ButtonPermissionEnum", "value": "back,termination"},
|
||||
* {"code": "CopySettingEnum", "value": "1,3,4,#{@spelRuleComponent.selectDeptLeaderById(#deptId", "#roleId)}"},
|
||||
* {"code": "VariablesEnum", "value": "key1=value1,key2=value2"}
|
||||
* ]
|
||||
*
|
||||
* @param ext 扩展属性 JSON 字符串
|
||||
* @param variable 流程变量
|
||||
* @return NodeExtVo 对象,封装按钮权限列表、抄送对象集合和自定义参数 Map
|
||||
* @return NodeExtVo 对象,封装按钮权限列表和自定义参数 Map
|
||||
*/
|
||||
@Override
|
||||
public NodeExtVo parseNodeExt(String ext, Map<String, Object> variable) {
|
||||
@ -240,22 +228,6 @@ public class FlwNodeExtServiceImpl implements NodeExtService, IFlwNodeExtService
|
||||
|
||||
nodeExtVo.setButtonPermissions(buttonList);
|
||||
|
||||
} else if (CopySettingEnum.class.getSimpleName().equals(code)) {
|
||||
List<String> permissions = spelSmartSplit(value).stream()
|
||||
.map(s -> {
|
||||
List<String> 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<String> copySettings = FlowEngine.permissionHandler().convertPermissions(permissions);
|
||||
// 解析抄送对象 ID 集合
|
||||
nodeExtVo.setCopySettings(new HashSet<>(copySettings));
|
||||
|
||||
} else if (VariablesEnum.class.getSimpleName().equals(code)) {
|
||||
// 解析自定义参数
|
||||
// 将 key=value 字符串拆分为 Map
|
||||
@ -272,93 +244,4 @@ public class FlwNodeExtServiceImpl implements NodeExtService, IFlwNodeExtService
|
||||
return nodeExtVo;
|
||||
}
|
||||
|
||||
/**
|
||||
* 按逗号分割字符串,但保留 #{...} 表达式和字符串常量中的逗号
|
||||
*
|
||||
* @param str 原始配置字符串
|
||||
* @return 智能分割后的片段列表
|
||||
*/
|
||||
private static List<String> spelSmartSplit(String str) {
|
||||
List<String> 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;
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断指定位置的下一个字符是否匹配预期字符。
|
||||
*
|
||||
* @param str 原始字符串
|
||||
* @param index 当前索引
|
||||
* @param expected 期望匹配的字符
|
||||
* @return 匹配成功返回 {@code true}
|
||||
*/
|
||||
private static boolean checkNext(String str, int index, char expected) {
|
||||
return index + 1 < str.length() && str.charAt(index + 1) == expected;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -18,11 +18,13 @@ import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.common.liteflow.utils.LiteFlowUtils;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import org.dromara.common.mybatis.core.query.QueryBuilder;
|
||||
import org.dromara.common.mybatis.utils.IdGeneratorUtil;
|
||||
import org.dromara.common.satoken.utils.LoginHelper;
|
||||
import org.dromara.system.api.UserService;
|
||||
import org.dromara.system.api.domain.UserDTO;
|
||||
import org.dromara.warm.flow.core.FlowEngine;
|
||||
import org.dromara.warm.flow.core.enums.FlowStatus;
|
||||
import org.dromara.warm.flow.core.enums.TaskStatus;
|
||||
import org.dromara.warm.flow.core.service.copy.CopyConfig;
|
||||
import org.dromara.warm.flow.core.workflow.command.RejectCommand;
|
||||
import org.dromara.warm.flow.core.workflow.command.TerminateCommand;
|
||||
import org.dromara.warm.flow.core.workflow.context.OperatorContext;
|
||||
@ -35,6 +37,7 @@ import org.dromara.warm.flow.core.enums.SkipType;
|
||||
import org.dromara.warm.flow.core.enums.UserType;
|
||||
import org.dromara.warm.flow.core.exception.FlowException;
|
||||
import org.dromara.warm.flow.core.service.*;
|
||||
import org.dromara.warm.flow.core.spi.PermissionHandler;
|
||||
import org.dromara.warm.flow.core.utils.ExpressionUtil;
|
||||
import org.dromara.warm.flow.core.utils.MapUtil;
|
||||
import org.dromara.warm.flow.orm.entity.FlowHisTask;
|
||||
@ -47,7 +50,6 @@ import org.dromara.warm.flow.orm.mapper.FlowTaskMapper;
|
||||
import org.dromara.workflow.api.domain.StartProcessReturnDTO;
|
||||
import org.dromara.workflow.common.ConditionalOnEnable;
|
||||
import org.dromara.workflow.common.enums.TaskAssigneeType;
|
||||
import org.dromara.workflow.common.enums.TaskStatusEnum;
|
||||
import org.dromara.workflow.domain.bo.*;
|
||||
import org.dromara.workflow.domain.context.CompleteTaskContext;
|
||||
import org.dromara.workflow.domain.context.StartProcessContext;
|
||||
@ -148,44 +150,22 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
||||
if (CollUtil.isEmpty(flowCopyList)) {
|
||||
return;
|
||||
}
|
||||
// 添加抄送人记录
|
||||
List<FlowHisTask> flowHisTasks = flowHisTaskMapper.selectList(
|
||||
QueryBuilder.lambda(FlowHisTask.class)
|
||||
.eq(FlowHisTask::getTaskId, task.getId())
|
||||
.build());
|
||||
if (CollUtil.isEmpty(flowHisTasks)) {
|
||||
throw new ServiceException("流程历史任务不存在,无法添加抄送记录");
|
||||
WorkflowContext context = new WorkflowContext();
|
||||
context.setHandler(LoginHelper.getUserIdStr());
|
||||
context.setMessage("【抄送给】" + StreamUtils.join(flowCopyList, FlowCopyBo::getNickName));
|
||||
// 抄送留痕交给引擎:按「同一待办 + 同一人」幂等,抄送人挂在抄送历史主键上,办结后仍可补抄送。
|
||||
HisTask copyHis = taskService.copy(task.getId()
|
||||
, StreamUtils.toList(flowCopyList, x -> Convert.toStr(x.getUserId())), context);
|
||||
if (ObjectUtil.isNull(copyHis)) {
|
||||
return;
|
||||
}
|
||||
FlowHisTask flowHisTask = flowHisTasks.getFirst();
|
||||
FlowNode flowNode = new FlowNode();
|
||||
flowNode.setNodeCode(flowHisTask.getTargetNodeCode());
|
||||
flowNode.setNodeName(flowHisTask.getTargetNodeName());
|
||||
//生成新的任务id
|
||||
long taskId = IdGeneratorUtil.nextLongId();
|
||||
task.setId(taskId);
|
||||
task.setNodeName("【抄送】" + task.getNodeName());
|
||||
// 抄送记录展示在触发抄送的办理记录之前,历史列表按更新时间倒序排列。
|
||||
Date updateTime = new Date(flowHisTask.getUpdateTime().getTime() + 1000);
|
||||
WorkflowContext workflowContext = new WorkflowContext();
|
||||
workflowContext.setTaskStatus(TaskStatusEnum.COPY.getStatus());
|
||||
workflowContext.setMessage("【抄送给】" + StreamUtils.join(flowCopyList, FlowCopyBo::getNickName));
|
||||
HisTask hisTask = hisTaskService.setSkipHisTask(task, flowNode, workflowContext, SkipType.NONE.getKey());
|
||||
hisTask.setCreateTime(updateTime);
|
||||
hisTask.setUpdateTime(updateTime);
|
||||
hisTaskService.save(hisTask);
|
||||
List<User> userList = StreamUtils.toList(flowCopyList, x ->
|
||||
new FlowUser()
|
||||
.setType(TaskAssigneeType.COPY.getCode())
|
||||
.setProcessedBy(Convert.toStr(x.getUserId()))
|
||||
.setAssociated(taskId));
|
||||
// 批量保存抄送人员
|
||||
FlowEngine.userService().saveBatch(userList);
|
||||
// 抄送消息进入“我的抄送”,不和待办列表混用。
|
||||
// 抄送消息进入“我的抄送”,不和待办列表混用;只提醒本次真正新增的人。
|
||||
flwCommonService.sendMessage(
|
||||
List.of(org.dromara.workflow.common.enums.MessageTypeEnum.SYSTEM_MESSAGE.getCode()),
|
||||
"您收到一条新的流程抄送,请及时查看。",
|
||||
"单据抄送提醒",
|
||||
userService.selectListByIds(StreamUtils.toList(flowCopyList, FlowCopyBo::getUserId)),
|
||||
userService.selectListByIds(StreamUtils.toList(
|
||||
StringUtils.str2List(copyHis.getCollaborator(), StringUtils.SEPARATOR, true, true), Convert::toLong)),
|
||||
PATH_TASK_COPY
|
||||
);
|
||||
}
|
||||
@ -325,8 +305,8 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
||||
command.setVariables(variable);
|
||||
command.setMessage(message);
|
||||
command.setExt(bo.getFileId());
|
||||
command.setFlowStatus(applyNodeCode.equals(bo.getNodeCode()) ? TaskStatusEnum.BACK.getStatus() : TaskStatusEnum.WAITING.getStatus());
|
||||
command.setTaskStatus(TaskStatusEnum.BACK.getStatus());
|
||||
command.setFlowStatus(applyNodeCode.equals(bo.getNodeCode()) ? FlowStatus.BACK.getKey() : FlowStatus.WAITING.getKey());
|
||||
command.setTaskStatus(TaskStatus.BACK.getKey());
|
||||
FlowEngine.workflow().reject(command);
|
||||
return true;
|
||||
}
|
||||
@ -487,8 +467,6 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
||||
command.setOperator(new OperatorContext(LoginHelper.getUserIdStr()));
|
||||
command.setTaskId(taskId);
|
||||
command.setMessage(bo.comment());
|
||||
command.setFlowStatus(BusinessStatusEnum.TERMINATION.getStatus());
|
||||
command.setTaskStatus(TaskStatusEnum.TERMINATION.getStatus());
|
||||
FlowEngine.workflow().terminate(command);
|
||||
return true;
|
||||
}
|
||||
@ -544,12 +522,13 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
||||
} else {
|
||||
flowTaskVo.setButtonList(new ArrayList<>());
|
||||
}
|
||||
if (CollUtil.isNotEmpty(nodeExtVo.getCopySettings())) {
|
||||
List<FlowCopyVo> list = StreamUtils.toList(nodeExtVo.getCopySettings(), x -> new FlowCopyVo(Convert.toLong(x)));
|
||||
flowTaskVo.setCopyList(list);
|
||||
} else {
|
||||
flowTaskVo.setCopyList(new ArrayList<>());
|
||||
// 抄送人读引擎节点配置 node_config.copy,展开规则与流转时一致(resolveCopyHandlers)。
|
||||
List<String> copyHandlers = CopyConfig.parse(flowNode.getNodeConfig()).getHandlers();
|
||||
PermissionHandler permissionHandler = FlowEngine.permissionHandler();
|
||||
if (CollUtil.isNotEmpty(copyHandlers) && ObjectUtil.isNotNull(permissionHandler)) {
|
||||
copyHandlers = permissionHandler.resolveCopyHandlers(copyHandlers);
|
||||
}
|
||||
flowTaskVo.setCopyList(StreamUtils.toList(copyHandlers, x -> new FlowCopyVo(Convert.toLong(x))));
|
||||
if (CollUtil.isNotEmpty(nodeExtVo.getVariables())) {
|
||||
flowTaskVo.setVarList(nodeExtVo.getVariables());
|
||||
} else {
|
||||
@ -763,6 +742,19 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
||||
if (taskAssignee) {
|
||||
return;
|
||||
}
|
||||
// 抄送人挂在抄送历史主键上(引擎 CopyAdvancer),不挂在待办 id 下,
|
||||
// 所以要先按待办找到抄送历史,再按历史主键查抄送接收人。
|
||||
List<HisTask> copyHisList = FlowEngine.hisTaskService()
|
||||
.list(FlowEngine.newHisTask().setTaskId(task.getId()).setFlowStatus(TaskStatus.COPY.getKey()));
|
||||
List<Long> copyHisIds = StreamUtils.toList(copyHisList, HisTask::getId);
|
||||
if (CollUtil.isNotEmpty(copyHisIds)) {
|
||||
boolean copyReceiver = FlowEngine.userService().getByAssociateds(copyHisIds).stream()
|
||||
.anyMatch(user -> Objects.equals(userId, user.getProcessedBy())
|
||||
&& UserType.COPY.getKey().equals(Convert.toStr(user.getType())));
|
||||
if (copyReceiver) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
Instance instance = insService.getById(task.getInstanceId());
|
||||
if (ObjectUtil.isNotNull(instance) && Objects.equals(instance.getCreateBy(), userId)) {
|
||||
return;
|
||||
|
||||
@ -17,6 +17,9 @@ import org.dromara.common.core.utils.StreamUtils;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.common.mybatis.core.domain.BaseEntity;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import org.dromara.warm.flow.core.FlowEngine;
|
||||
import org.dromara.warm.flow.core.entity.Definition;
|
||||
import org.dromara.warm.flow.core.entity.Instance;
|
||||
import org.dromara.workflow.api.WorkflowService;
|
||||
import org.dromara.workflow.api.domain.StartProcessDTO;
|
||||
import org.dromara.workflow.api.event.ProcessDeleteEvent;
|
||||
@ -28,6 +31,7 @@ import org.dromara.workflow.domain.TestLeave;
|
||||
import org.dromara.workflow.domain.bo.TestLeaveBo;
|
||||
import org.dromara.workflow.domain.vo.TestLeaveVo;
|
||||
import org.dromara.workflow.mapper.TestLeaveMapper;
|
||||
import org.dromara.workflow.service.IFlwInstanceService;
|
||||
import org.dromara.workflow.service.ITestLeaveService;
|
||||
import org.springframework.context.event.EventListener;
|
||||
import org.springframework.stereotype.Service;
|
||||
@ -52,6 +56,7 @@ public class TestLeaveServiceImpl implements ITestLeaveService {
|
||||
|
||||
private final TestLeaveMapper leaveMapper;
|
||||
private final WorkflowService workflowService;
|
||||
private final IFlwInstanceService flwInstanceService;
|
||||
|
||||
/**
|
||||
* spel条件表达:判断小于2
|
||||
@ -71,7 +76,19 @@ public class TestLeaveServiceImpl implements ITestLeaveService {
|
||||
*/
|
||||
@Override
|
||||
public TestLeaveVo queryById(Long id) {
|
||||
return leaveMapper.selectVoById(id);
|
||||
TestLeaveVo vo = leaveMapper.selectVoById(id);
|
||||
if (ObjectUtil.isNull(vo)) {
|
||||
return null;
|
||||
}
|
||||
// 撤回 / 退回后修改再提交走的是已有实例的续提交,前端需要拿到原流程编码
|
||||
Instance instance = flwInstanceService.selectInstByBusinessId(Convert.toStr(id));
|
||||
if (ObjectUtil.isNotNull(instance)) {
|
||||
Definition definition = FlowEngine.defService().getById(instance.getDefinitionId());
|
||||
if (ObjectUtil.isNotNull(definition)) {
|
||||
vo.setFlowCode(definition.getFlowCode());
|
||||
}
|
||||
}
|
||||
return vo;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -205,14 +222,19 @@ public class TestLeaveServiceImpl implements ITestLeaveService {
|
||||
/**
|
||||
* 总体流程监听(例如: 草稿,撤销,退回,作废,终止,已完成等)
|
||||
* 正常使用只需#processEvent.flowCode=='leave1'
|
||||
* 示例为了方便则使用startsWith匹配了全部示例key
|
||||
* 示例流程编码已切换为引擎自带的 demo_ 前缀,故这里按 demo 匹配
|
||||
*
|
||||
* @param processEvent 参数
|
||||
*/
|
||||
@EventListener(condition = "#processEvent.flowCode.startsWith('leave')")
|
||||
@EventListener(condition = "#processEvent.flowCode.startsWith('demo')")
|
||||
public void processHandler(ProcessEvent processEvent) {
|
||||
log.info("当前任务执行了{}", processEvent.toString());
|
||||
TestLeave testLeave = leaveMapper.selectById(Convert.toLong(processEvent.getBusinessId()));
|
||||
if (ObjectUtil.isNull(testLeave)) {
|
||||
// 定时启动 / 消息启动的流程带的是引擎自造 businessId(如 T2112..._1760...),
|
||||
// 不是请假表主键,回写无从谈起;这里直接跳过,避免示例监听被无关流程的事件打爆。
|
||||
return;
|
||||
}
|
||||
testLeave.setStatus(processEvent.getStatus());
|
||||
// 用于例如审批附件 审批意见等 存储到业务表内 自行根据业务实现存储流程
|
||||
Map<String, Object> params = processEvent.getParams();
|
||||
@ -247,7 +269,7 @@ public class TestLeaveServiceImpl implements ITestLeaveService {
|
||||
*
|
||||
* @param processTaskEvent 参数
|
||||
*/
|
||||
@EventListener(condition = "#processTaskEvent.flowCode.startsWith('leave')")
|
||||
@EventListener(condition = "#processTaskEvent.flowCode.startsWith('demo')")
|
||||
public void processTaskHandler(ProcessTaskEvent processTaskEvent) {
|
||||
log.info("当前任务创建了{}", processTaskEvent.toString());
|
||||
}
|
||||
@ -255,11 +277,11 @@ public class TestLeaveServiceImpl implements ITestLeaveService {
|
||||
/**
|
||||
* 监听删除流程事件
|
||||
* 正常使用只需#processDeleteEvent.flowCode=='leave1'
|
||||
* 示例为了方便则使用startsWith匹配了全部示例key
|
||||
* 示例流程编码已切换为引擎自带的 demo_ 前缀,故这里按 demo 匹配
|
||||
*
|
||||
* @param processDeleteEvent 参数
|
||||
*/
|
||||
@EventListener(condition = "#processDeleteEvent.flowCode.startsWith('leave')")
|
||||
@EventListener(condition = "#processDeleteEvent.flowCode.startsWith('demo')")
|
||||
public void processDeleteHandler(ProcessDeleteEvent processDeleteEvent) {
|
||||
log.info("监听删除流程事件,当前任务执行了{}", processDeleteEvent.toString());
|
||||
TestLeave testLeave = leaveMapper.selectById(Convert.toLong(processDeleteEvent.getBusinessId()));
|
||||
|
||||
@ -25,17 +25,12 @@
|
||||
办理任务链路:
|
||||
1. 加载任务实例、补齐变量并解析办理人
|
||||
2. 构建参数并执行当前任务跳转
|
||||
3. 开启自动审批时继续办理当前处理人的后续任务
|
||||
自动审批由引擎按流程定义配置 def_config.autoPass 在办理链内完成,宿主不再单独编排。
|
||||
-->
|
||||
<chain name="completeTaskChain">
|
||||
THEN(
|
||||
completePrepare,
|
||||
completeExecute,
|
||||
IF(
|
||||
completeNeedAutoPass,
|
||||
completeAutoPass,
|
||||
noop
|
||||
)
|
||||
completeExecute
|
||||
);
|
||||
</chain>
|
||||
|
||||
|
||||
111
script/demo/demo_event_cooldown.json
Normal file
111
script/demo/demo_event_cooldown.json
Normal file
@ -0,0 +1,111 @@
|
||||
{
|
||||
"version": "1",
|
||||
"category": "1762300000000000100",
|
||||
"flowCode": "demo_event_cooldown",
|
||||
"flowName": "账号注销-冷静期示例",
|
||||
"formPath": "/workflow/leaveEdit/index",
|
||||
"nodeList": [
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "start",
|
||||
"nodeName": "开始",
|
||||
"nodeType": 0,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "85,200;160,200",
|
||||
"nowNodeCode": "start",
|
||||
"nextNodeCode": "apply"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "60,200|60,200",
|
||||
"formCustom": "N"
|
||||
},
|
||||
{
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"copy,back,termination,file\"}]",
|
||||
"nodeCode": "apply",
|
||||
"nodeName": "提交注销申请",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "260,200;310,200",
|
||||
"nowNodeCode": "apply",
|
||||
"nextNodeCode": "cooldown"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "210,200|210,200",
|
||||
"formCustom": "N",
|
||||
"permissionFlag": "warmFlowInitiator"
|
||||
},
|
||||
{
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"copy,back,termination,file\"}]",
|
||||
"nodeCode": "confirm",
|
||||
"nodeName": "注销终审确认",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "560,200;610,200",
|
||||
"nowNodeCode": "confirm",
|
||||
"nextNodeCode": "msgThrow"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "510,200|510,200",
|
||||
"formCustom": "N",
|
||||
"permissionFlag": "1761100000000000001"
|
||||
},
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "cooldown",
|
||||
"nodeName": "冷静期 2 分钟",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "410,200;460,200",
|
||||
"nowNodeCode": "cooldown",
|
||||
"nextNodeCode": "confirm"
|
||||
}
|
||||
],
|
||||
"eventType": "TIMER_CATCH",
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "360,200|360,200",
|
||||
"formCustom": "N",
|
||||
"nodeConfig": "{\"event\":{\"timerType\":\"AFTER\",\"timerValue\":\"PT2M\"}}"
|
||||
},
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "msgThrow",
|
||||
"nodeName": "注销结果推送",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "710,200;755,200",
|
||||
"nowNodeCode": "msgThrow",
|
||||
"nextNodeCode": "end"
|
||||
}
|
||||
],
|
||||
"eventName": "membership.cancelled",
|
||||
"eventType": "MESSAGE_THROW",
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "660,200|660,200",
|
||||
"formCustom": "N"
|
||||
},
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "end",
|
||||
"nodeName": "结束",
|
||||
"nodeType": 2,
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "780,200|780,200",
|
||||
"formCustom": "N"
|
||||
}
|
||||
],
|
||||
"formCustom": "N",
|
||||
"modelValue": "CLASSICS"
|
||||
}
|
||||
194
script/demo/demo_event_daily_check.json
Normal file
194
script/demo/demo_event_daily_check.json
Normal file
@ -0,0 +1,194 @@
|
||||
{
|
||||
"version": "2",
|
||||
"category": "1762300000000000100",
|
||||
"flowCode": "demo_event_daily_check",
|
||||
"flowName": "每日自动巡检-终止结束示例",
|
||||
"formPath": "/workflow/leaveEdit/index",
|
||||
"nodeList": [
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "start",
|
||||
"nodeName": "开始",
|
||||
"nodeType": 0,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "88,260;190,260",
|
||||
"nowNodeCode": "start",
|
||||
"nextNodeCode": "timerStart"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "60,260|60,260",
|
||||
"formCustom": "N"
|
||||
},
|
||||
{
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"copy,back,termination,file\"}]",
|
||||
"nodeCode": "inspect",
|
||||
"nodeName": "执行数据巡检",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "470,260;555,260",
|
||||
"nowNodeCode": "inspect",
|
||||
"nextNodeCode": "gw1"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "420,260|420,260",
|
||||
"formCustom": "N",
|
||||
"permissionFlag": "1761100000000000001"
|
||||
},
|
||||
{
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"copy,back,termination,file\"}]",
|
||||
"nodeCode": "qa",
|
||||
"nodeName": "质检复核",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "830,120;1020,120;1020,235",
|
||||
"nowNodeCode": "qa",
|
||||
"nextNodeCode": "gw2"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "780,120|780,120",
|
||||
"formCustom": "N",
|
||||
"permissionFlag": "1761100000000000003"
|
||||
},
|
||||
{
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"copy,back,termination,file\"}]",
|
||||
"nodeCode": "risk",
|
||||
"nodeName": "风控否决判定",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "830,400;870,400",
|
||||
"nowNodeCode": "risk",
|
||||
"nextNodeCode": "gwRisk"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "780,400|780,400",
|
||||
"formCustom": "N",
|
||||
"permissionFlag": "1761100000000000004"
|
||||
},
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "terminate",
|
||||
"nodeName": "严重异常终止",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "1070,400;1220,400;1220,288",
|
||||
"nowNodeCode": "terminate",
|
||||
"nextNodeCode": "end"
|
||||
}
|
||||
],
|
||||
"eventType": "TERMINATE_END",
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "1020,400|1020,400",
|
||||
"formCustom": "N"
|
||||
},
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "timerStart",
|
||||
"nodeName": "每天 09:00 自动发起",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "290,260;370,260",
|
||||
"nowNodeCode": "timerStart",
|
||||
"nextNodeCode": "inspect"
|
||||
}
|
||||
],
|
||||
"eventType": "TIMER_START",
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "240,260|240,260",
|
||||
"formCustom": "N",
|
||||
"nodeConfig": "{\"event\": {\"timerType\": \"POINT_IN_TIME\", \"timerValue\": \"[\\\"09:00\\\"]\", \"timezone\": \"Asia/Shanghai\", \"variables\": {\"veto\": 0, \"channel\": \"daily\"}}}"
|
||||
},
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "end",
|
||||
"nodeName": "结束",
|
||||
"nodeType": 2,
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "1220,260|1220,260",
|
||||
"formCustom": "N"
|
||||
},
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "gwRisk",
|
||||
"nodeName": "是否严重异常",
|
||||
"nodeType": 3,
|
||||
"skipList": [
|
||||
{
|
||||
"skipName": "严重异常",
|
||||
"skipType": "PASS",
|
||||
"coordinate": "925,400;970,400",
|
||||
"nowNodeCode": "gwRisk",
|
||||
"nextNodeCode": "terminate",
|
||||
"skipCondition": "eq@@veto|1"
|
||||
},
|
||||
{
|
||||
"skipName": "无异常",
|
||||
"skipType": "PASS",
|
||||
"coordinate": "900,378;900,260;995,260",
|
||||
"nowNodeCode": "gwRisk",
|
||||
"nextNodeCode": "gw2"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "900,400",
|
||||
"formCustom": "N"
|
||||
},
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "gw1",
|
||||
"nodeName": "并行分支",
|
||||
"nodeType": 4,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "605,260;700,260;700,120;730,120",
|
||||
"nowNodeCode": "gw1",
|
||||
"nextNodeCode": "qa"
|
||||
},
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "605,260;700,260;700,400;730,400",
|
||||
"nowNodeCode": "gw1",
|
||||
"nextNodeCode": "risk"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "580,260",
|
||||
"formCustom": "N"
|
||||
},
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "gw2",
|
||||
"nodeName": "汇聚",
|
||||
"nodeType": 4,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "1045,260;1192,260",
|
||||
"nowNodeCode": "gw2",
|
||||
"nextNodeCode": "end"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "1020,260",
|
||||
"formCustom": "N"
|
||||
}
|
||||
],
|
||||
"formCustom": "N",
|
||||
"modelValue": "CLASSICS"
|
||||
}
|
||||
74
script/demo/demo_event_notify.json
Normal file
74
script/demo/demo_event_notify.json
Normal file
@ -0,0 +1,74 @@
|
||||
{
|
||||
"version": "1",
|
||||
"category": "1762300000000000100",
|
||||
"flowCode": "demo_event_notify",
|
||||
"flowName": "注销结果通知-消息启动示例",
|
||||
"formPath": "/workflow/leaveEdit/index",
|
||||
"nodeList": [
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "start",
|
||||
"nodeName": "开始",
|
||||
"nodeType": 0,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "85,200;160,200",
|
||||
"nowNodeCode": "start",
|
||||
"nextNodeCode": "msgStart"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "60,200|60,200",
|
||||
"formCustom": "N"
|
||||
},
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "msgStart",
|
||||
"nodeName": "账号已注销",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "260,200;310,200",
|
||||
"nowNodeCode": "msgStart",
|
||||
"nextNodeCode": "notify"
|
||||
}
|
||||
],
|
||||
"eventName": "membership.cancelled",
|
||||
"eventType": "MESSAGE_START",
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "210,200|210,200",
|
||||
"formCustom": "N"
|
||||
},
|
||||
{
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"copy,back,termination,file\"}]",
|
||||
"nodeCode": "notify",
|
||||
"nodeName": "发送注销通知",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "410,200;455,200",
|
||||
"nowNodeCode": "notify",
|
||||
"nextNodeCode": "end"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "360,200|360,200",
|
||||
"formCustom": "N",
|
||||
"permissionFlag": "1761100000000000001"
|
||||
},
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "end",
|
||||
"nodeName": "结束",
|
||||
"nodeType": 2,
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "480,200|480,200",
|
||||
"formCustom": "N"
|
||||
}
|
||||
],
|
||||
"formCustom": "N",
|
||||
"modelValue": "CLASSICS"
|
||||
}
|
||||
120
script/demo/demo_event_pay_fail.json
Normal file
120
script/demo/demo_event_pay_fail.json
Normal file
@ -0,0 +1,120 @@
|
||||
{
|
||||
"version": "1",
|
||||
"category": "1762300000000000100",
|
||||
"flowCode": "demo_event_pay_fail",
|
||||
"flowName": "付款失败善后示例",
|
||||
"formPath": "/workflow/leaveEdit/index",
|
||||
"nodeList": [
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "start",
|
||||
"nodeName": "开始",
|
||||
"nodeType": 0,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "85,200;160,200",
|
||||
"nowNodeCode": "start",
|
||||
"nextNodeCode": "apply"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "60,200|60,200",
|
||||
"formCustom": "N"
|
||||
},
|
||||
{
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"copy,back,termination,file\"}]",
|
||||
"nodeCode": "apply",
|
||||
"nodeName": "发起付款申请",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "260,200;310,200",
|
||||
"nowNodeCode": "apply",
|
||||
"nextNodeCode": "pay"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "210,200|210,200",
|
||||
"formCustom": "N",
|
||||
"permissionFlag": "warmFlowInitiator"
|
||||
},
|
||||
{
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"copy,back,termination,file\"}]",
|
||||
"nodeCode": "pay",
|
||||
"nodeName": "财务执行付款",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "410,200;755,200",
|
||||
"nowNodeCode": "pay",
|
||||
"nextNodeCode": "end"
|
||||
},
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "360,240;360,360",
|
||||
"nowNodeCode": "pay",
|
||||
"nextNodeCode": "payBoundary"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "360,200|360,200",
|
||||
"formCustom": "N",
|
||||
"listenerPath": "org.dromara.workflow.demo.DemoPayFailListener",
|
||||
"listenerType": "create",
|
||||
"permissionFlag": "1761100000000000004"
|
||||
},
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "payBoundary",
|
||||
"nodeName": "付款失败善后",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "410,400;460,400",
|
||||
"nowNodeCode": "payBoundary",
|
||||
"nextNodeCode": "rescue"
|
||||
}
|
||||
],
|
||||
"eventName": "PAY_FAILED",
|
||||
"eventType": "ERROR_BOUNDARY",
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "360,400|360,400",
|
||||
"formCustom": "N",
|
||||
"interrupting": 1,
|
||||
"attachedToNodeCode": "pay"
|
||||
},
|
||||
{
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"copy,back,termination,file\"}]",
|
||||
"nodeCode": "rescue",
|
||||
"nodeName": "失败善后处理",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "560,400;780,400;780,225",
|
||||
"nowNodeCode": "rescue",
|
||||
"nextNodeCode": "end"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "510,400|510,400",
|
||||
"formCustom": "N",
|
||||
"permissionFlag": "1761100000000000001"
|
||||
},
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "end",
|
||||
"nodeName": "结束",
|
||||
"nodeType": 2,
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "780,200|780,200",
|
||||
"formCustom": "N"
|
||||
}
|
||||
],
|
||||
"formCustom": "N",
|
||||
"modelValue": "CLASSICS"
|
||||
}
|
||||
149
script/demo/demo_event_refund.json
Normal file
149
script/demo/demo_event_refund.json
Normal file
@ -0,0 +1,149 @@
|
||||
{
|
||||
"version": "1",
|
||||
"category": "1762300000000000100",
|
||||
"flowCode": "demo_event_refund",
|
||||
"flowName": "退款审批-超时升级示例",
|
||||
"formPath": "/workflow/leaveEdit/index",
|
||||
"nodeList": [
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "start",
|
||||
"nodeName": "开始",
|
||||
"nodeType": 0,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "85,200;160,200",
|
||||
"nowNodeCode": "start",
|
||||
"nextNodeCode": "apply"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "60,200|60,200",
|
||||
"formCustom": "N"
|
||||
},
|
||||
{
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"copy,back,termination,file\"}]",
|
||||
"nodeCode": "apply",
|
||||
"nodeName": "提交退款申请",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "260,200;310,200",
|
||||
"nowNodeCode": "apply",
|
||||
"nextNodeCode": "review"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "210,200|210,200",
|
||||
"formCustom": "N",
|
||||
"permissionFlag": "warmFlowInitiator"
|
||||
},
|
||||
{
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"copy,back,termination,file\"}]",
|
||||
"nodeCode": "finance",
|
||||
"nodeName": "财务退款",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "710,200;760,200",
|
||||
"nowNodeCode": "finance",
|
||||
"nextNodeCode": "msgEnd"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "660,200|660,200",
|
||||
"formCustom": "N",
|
||||
"permissionFlag": "1761100000000000001"
|
||||
},
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "msgEnd",
|
||||
"nodeName": "退款结果通知",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "860,200;905,200",
|
||||
"nowNodeCode": "msgEnd",
|
||||
"nextNodeCode": "end"
|
||||
}
|
||||
],
|
||||
"eventName": "refund.finish",
|
||||
"eventType": "MESSAGE_END",
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "810,200|810,200",
|
||||
"formCustom": "N"
|
||||
},
|
||||
{
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"copy,back,termination,file\"}]",
|
||||
"nodeCode": "review",
|
||||
"nodeName": "客服初审",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "360,240;360,400;460,400",
|
||||
"nowNodeCode": "review",
|
||||
"nextNodeCode": "supervisor"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "360,200|360,200",
|
||||
"formCustom": "N",
|
||||
"permissionFlag": "1761100000000000004"
|
||||
},
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "reviewBoundary",
|
||||
"nodeName": "初审超时升级",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "410,400;460,400",
|
||||
"nowNodeCode": "reviewBoundary",
|
||||
"nextNodeCode": "supervisor"
|
||||
}
|
||||
],
|
||||
"eventType": "TIMER_BOUNDARY",
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "360,400|360,400",
|
||||
"formCustom": "N",
|
||||
"nodeConfig": "{\"event\":{\"timerType\":\"AFTER\",\"timerValue\":\"PT2M\"}}",
|
||||
"interrupting": 1,
|
||||
"attachedToNodeCode": "review"
|
||||
},
|
||||
{
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"copy,back,termination,file\"}]",
|
||||
"nodeCode": "supervisor",
|
||||
"nodeName": "客服主管复核",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "560,400;660,400;660,240",
|
||||
"nowNodeCode": "supervisor",
|
||||
"nextNodeCode": "finance"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "510,400|510,400",
|
||||
"formCustom": "N",
|
||||
"permissionFlag": "1761100000000000001"
|
||||
},
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "end",
|
||||
"nodeName": "结束",
|
||||
"nodeType": 2,
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "930,200|930,200",
|
||||
"formCustom": "N"
|
||||
}
|
||||
],
|
||||
"formCustom": "N",
|
||||
"modelValue": "CLASSICS"
|
||||
}
|
||||
93
script/demo/demo_event_risk_wait.json
Normal file
93
script/demo/demo_event_risk_wait.json
Normal file
@ -0,0 +1,93 @@
|
||||
{
|
||||
"version": "1",
|
||||
"category": "1762300000000000100",
|
||||
"flowCode": "demo_event_risk_wait",
|
||||
"flowName": "支付对账-等待外部回调示例",
|
||||
"formPath": "/workflow/leaveEdit/index",
|
||||
"nodeList": [
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "start",
|
||||
"nodeName": "开始",
|
||||
"nodeType": 0,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "85,200;160,200",
|
||||
"nowNodeCode": "start",
|
||||
"nextNodeCode": "msgStart"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "60,200|60,200",
|
||||
"formCustom": "N"
|
||||
},
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "msgStart",
|
||||
"nodeName": "订单已支付",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "260,200;310,200",
|
||||
"nowNodeCode": "msgStart",
|
||||
"nextNodeCode": "riskCatch"
|
||||
}
|
||||
],
|
||||
"eventName": "order.paid",
|
||||
"eventType": "MESSAGE_START",
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "210,200|210,200",
|
||||
"formCustom": "N"
|
||||
},
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "riskCatch",
|
||||
"nodeName": "等待风控审核结果",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "410,200;460,200",
|
||||
"nowNodeCode": "riskCatch",
|
||||
"nextNodeCode": "settle"
|
||||
}
|
||||
],
|
||||
"eventName": "risk.result",
|
||||
"eventType": "MESSAGE_CATCH",
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "360,200|360,200",
|
||||
"formCustom": "N"
|
||||
},
|
||||
{
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"copy,back,termination,file\"}]",
|
||||
"nodeCode": "settle",
|
||||
"nodeName": "对账确认",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "560,200;605,200",
|
||||
"nowNodeCode": "settle",
|
||||
"nextNodeCode": "end"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "510,200|510,200",
|
||||
"formCustom": "N",
|
||||
"permissionFlag": "1761100000000000001"
|
||||
},
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "end",
|
||||
"nodeName": "结束",
|
||||
"nodeType": 2,
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "630,200|630,200",
|
||||
"formCustom": "N"
|
||||
}
|
||||
],
|
||||
"formCustom": "N",
|
||||
"modelValue": "CLASSICS"
|
||||
}
|
||||
385
script/demo/demo_gateway_classic.json
Normal file
385
script/demo/demo_gateway_classic.json
Normal file
@ -0,0 +1,385 @@
|
||||
{
|
||||
"version": "1",
|
||||
"category": "1762300000000000100",
|
||||
"flowCode": "demo_gateway_classic",
|
||||
"flowName": "网关综合-经典模式示例",
|
||||
"formPath": "/workflow/leaveEdit/index",
|
||||
"nodeList": [
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "start",
|
||||
"nodeName": "开始",
|
||||
"nodeType": 0,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "88,260;180,260",
|
||||
"nowNodeCode": "start",
|
||||
"nextNodeCode": "submit"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "60,260|60,260",
|
||||
"formCustom": "N"
|
||||
},
|
||||
{
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"copy,back,termination,file,subSign,addSign,transfer,trust\"}]",
|
||||
"nodeCode": "51ca4cb3-684b-4c3d-b474-9ec3363440bc",
|
||||
"nodeName": "第四个",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "860,140;935,140;935,260;975,260",
|
||||
"nowNodeCode": "51ca4cb3-684b-4c3d-b474-9ec3363440bc",
|
||||
"nextNodeCode": "17000bff-87ab-4b6d-babc-0f3c51b48858"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "100",
|
||||
"coordinate": "810,140|810,140",
|
||||
"formCustom": "N",
|
||||
"permissionFlag": "1761100000000000001@@1761100000000000003"
|
||||
},
|
||||
{
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"copy,back,termination,file\"}]",
|
||||
"nodeCode": "54e21807-9501-4e49-90b9-1104f359709e",
|
||||
"nodeName": "包容小于三",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "2180,200;2280,200;2280,260;2305,260",
|
||||
"nowNodeCode": "54e21807-9501-4e49-90b9-1104f359709e",
|
||||
"nextNodeCode": "ed4a73f7-5197-4362-a4c7-e6295ad211c4"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "2130,200|2130,200",
|
||||
"formCustom": "N",
|
||||
"permissionFlag": "1761100000000000001"
|
||||
},
|
||||
{
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"copy,back,termination,file\"}]",
|
||||
"nodeCode": "79a20053-b41e-4f16-987d-5ac6e2a37a65",
|
||||
"nodeName": "包容4",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "2180,500;2280,500;2280,260;2305,260",
|
||||
"nowNodeCode": "79a20053-b41e-4f16-987d-5ac6e2a37a65",
|
||||
"nextNodeCode": "ed4a73f7-5197-4362-a4c7-e6295ad211c4"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "2130,500|2130,500",
|
||||
"formCustom": "N",
|
||||
"permissionFlag": "1761100000000000004"
|
||||
},
|
||||
{
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"copy,back,termination,file\"}]",
|
||||
"nodeCode": "86d7c888-0428-4c0f-b462-6e4563c21daf",
|
||||
"nodeName": "并行一",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "1420,140;1530,140",
|
||||
"nowNodeCode": "86d7c888-0428-4c0f-b462-6e4563c21daf",
|
||||
"nextNodeCode": "8d4baa8d-b2ca-4de0-96df-33e46aa12bb4"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "1370,140|1370,140",
|
||||
"formCustom": "N",
|
||||
"permissionFlag": "1761100000000000001"
|
||||
},
|
||||
{
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"copy,back,termination,file\"}]",
|
||||
"nodeCode": "8b46aefa-c496-48c4-ae2c-381035f69dda",
|
||||
"nodeName": "最后一个",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "2560,260;2652,260",
|
||||
"nowNodeCode": "8b46aefa-c496-48c4-ae2c-381035f69dda",
|
||||
"nextNodeCode": "19c75cd4-36c3-48f7-96ad-9205f9337a2f"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "2510,260|2510,260",
|
||||
"formCustom": "N",
|
||||
"permissionFlag": "1761100000000000001"
|
||||
},
|
||||
{
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"copy,back,termination,file,subSign,addSign\"}]",
|
||||
"nodeCode": "8d4baa8d-b2ca-4de0-96df-33e46aa12bb4",
|
||||
"nodeName": "并行二",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "1630,140;1700,140;1700,260;1735,260",
|
||||
"nowNodeCode": "8d4baa8d-b2ca-4de0-96df-33e46aa12bb4",
|
||||
"nextNodeCode": "ca78e892-b181-4d2e-afbe-21e0d1936fe5"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "60",
|
||||
"coordinate": "1580,140|1580,140",
|
||||
"formCustom": "N",
|
||||
"permissionFlag": "1761100000000000001@@1761100000000000003@@1761100000000000004"
|
||||
},
|
||||
{
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"copy,back,termination,file,transfer,trust,addSign,subSign\"}]",
|
||||
"nodeCode": "974a0d43-53a1-4384-8ee1-2f9665d5aa2d",
|
||||
"nodeName": "大于三天",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "640,140;760,140",
|
||||
"nowNodeCode": "974a0d43-53a1-4384-8ee1-2f9665d5aa2d",
|
||||
"nextNodeCode": "51ca4cb3-684b-4c3d-b474-9ec3363440bc"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "590,140|590,140",
|
||||
"formCustom": "N",
|
||||
"permissionFlag": "1761100000000000003"
|
||||
},
|
||||
{
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"copy,back,termination,file\"}]",
|
||||
"nodeCode": "b057d0fb-068d-47db-ae9e-8f4356600672",
|
||||
"nodeName": "包容3",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "2180,350;2255,350;2255,260;2305,260",
|
||||
"nowNodeCode": "b057d0fb-068d-47db-ae9e-8f4356600672",
|
||||
"nextNodeCode": "ed4a73f7-5197-4362-a4c7-e6295ad211c4"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "2130,350|2130,350",
|
||||
"formCustom": "N",
|
||||
"permissionFlag": "1761100000000000001"
|
||||
},
|
||||
{
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"copy,back,termination,file,subSign,transfer,addSign,trust\"}]",
|
||||
"nodeCode": "dc06e24f-b67c-4268-b2d7-dea1941ef462",
|
||||
"nodeName": "小于三天",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "640,380;935,380;935,260;975,260",
|
||||
"nowNodeCode": "dc06e24f-b67c-4268-b2d7-dea1941ef462",
|
||||
"nextNodeCode": "17000bff-87ab-4b6d-babc-0f3c51b48858"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "590,380|590,380",
|
||||
"formCustom": "N",
|
||||
"permissionFlag": "1761100000000000001"
|
||||
},
|
||||
{
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"copy,back,termination,file\"}]",
|
||||
"nodeCode": "f3482139-ab8e-4f18-940a-d3298346caff",
|
||||
"nodeName": "包容day大于三",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "2180,50;2255,50;2255,260;2305,260",
|
||||
"nowNodeCode": "f3482139-ab8e-4f18-940a-d3298346caff",
|
||||
"nextNodeCode": "ed4a73f7-5197-4362-a4c7-e6295ad211c4"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "2130,50|2130,50",
|
||||
"formCustom": "N",
|
||||
"permissionFlag": "1761100000000000003"
|
||||
},
|
||||
{
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"copy,back,termination,file\"}]",
|
||||
"nodeCode": "f6fc6c06-4d64-4ee6-8f6a-4c5212d01ccc",
|
||||
"nodeName": "并行一同级",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "1420,400;1700,400;1700,260;1735,260",
|
||||
"nowNodeCode": "f6fc6c06-4d64-4ee6-8f6a-4c5212d01ccc",
|
||||
"nextNodeCode": "ca78e892-b181-4d2e-afbe-21e0d1936fe5"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "1370,400|1370,400",
|
||||
"formCustom": "N",
|
||||
"permissionFlag": "1761100000000000001"
|
||||
},
|
||||
{
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"copy,back,termination,file\"}]",
|
||||
"nodeCode": "submit",
|
||||
"nodeName": "申请人",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "280,260;365,260",
|
||||
"nowNodeCode": "submit",
|
||||
"nextNodeCode": "e9b6ac64-5deb-4af9-81f2-4b750b8b890a"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "230,260|230,260",
|
||||
"formCustom": "N",
|
||||
"permissionFlag": "warmFlowInitiator"
|
||||
},
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "19c75cd4-36c3-48f7-96ad-9205f9337a2f",
|
||||
"nodeName": "结束",
|
||||
"nodeType": 2,
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "2680,260|2680,260",
|
||||
"formCustom": "N"
|
||||
},
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "17000bff-87ab-4b6d-babc-0f3c51b48858",
|
||||
"nodeType": 3,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "1025,260;1145,260",
|
||||
"nowNodeCode": "17000bff-87ab-4b6d-babc-0f3c51b48858",
|
||||
"nextNodeCode": "ffa7942a-e0b4-42c8-9aa6-83ebb6208547"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "1000,260",
|
||||
"formCustom": "N"
|
||||
},
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "e9b6ac64-5deb-4af9-81f2-4b750b8b890a",
|
||||
"nodeType": 3,
|
||||
"skipList": [
|
||||
{
|
||||
"skipName": "day>3",
|
||||
"skipType": "PASS",
|
||||
"coordinate": "415,260;480,260;480,140;540,140",
|
||||
"nowNodeCode": "e9b6ac64-5deb-4af9-81f2-4b750b8b890a",
|
||||
"nextNodeCode": "974a0d43-53a1-4384-8ee1-2f9665d5aa2d",
|
||||
"skipCondition": "gt@@day|3"
|
||||
},
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "415,260;480,260;480,380;540,380",
|
||||
"nowNodeCode": "e9b6ac64-5deb-4af9-81f2-4b750b8b890a",
|
||||
"nextNodeCode": "dc06e24f-b67c-4268-b2d7-dea1941ef462"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "390,260",
|
||||
"formCustom": "N"
|
||||
},
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "ca78e892-b181-4d2e-afbe-21e0d1936fe5",
|
||||
"nodeType": 4,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "1785,260;1905,260",
|
||||
"nowNodeCode": "ca78e892-b181-4d2e-afbe-21e0d1936fe5",
|
||||
"nextNodeCode": "761c8e6e-169d-48f7-be85-1b3f1c3c1646"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "1760,260",
|
||||
"formCustom": "N"
|
||||
},
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "ffa7942a-e0b4-42c8-9aa6-83ebb6208547",
|
||||
"nodeType": 4,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "1195,260;1265,260;1265,140;1320,140",
|
||||
"nowNodeCode": "ffa7942a-e0b4-42c8-9aa6-83ebb6208547",
|
||||
"nextNodeCode": "86d7c888-0428-4c0f-b462-6e4563c21daf"
|
||||
},
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "1195,260;1265,260;1265,400;1320,400",
|
||||
"nowNodeCode": "ffa7942a-e0b4-42c8-9aa6-83ebb6208547",
|
||||
"nextNodeCode": "f6fc6c06-4d64-4ee6-8f6a-4c5212d01ccc"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "1170,260",
|
||||
"formCustom": "N"
|
||||
},
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "761c8e6e-169d-48f7-be85-1b3f1c3c1646",
|
||||
"nodeType": 5,
|
||||
"skipList": [
|
||||
{
|
||||
"skipName": "day>3",
|
||||
"skipType": "PASS",
|
||||
"coordinate": "1955,260;2020,260;2020,50;2080,50",
|
||||
"nowNodeCode": "761c8e6e-169d-48f7-be85-1b3f1c3c1646",
|
||||
"nextNodeCode": "f3482139-ab8e-4f18-940a-d3298346caff",
|
||||
"skipCondition": "gt@@day|3"
|
||||
},
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "1955,260;2020,260;2020,350;2080,350",
|
||||
"nowNodeCode": "761c8e6e-169d-48f7-be85-1b3f1c3c1646",
|
||||
"nextNodeCode": "b057d0fb-068d-47db-ae9e-8f4356600672"
|
||||
},
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "1955,260;2045,260;2045,500;2080,500",
|
||||
"nowNodeCode": "761c8e6e-169d-48f7-be85-1b3f1c3c1646",
|
||||
"nextNodeCode": "79a20053-b41e-4f16-987d-5ac6e2a37a65"
|
||||
},
|
||||
{
|
||||
"skipName": "day<3",
|
||||
"skipType": "PASS",
|
||||
"coordinate": "1955,260;2045,260;2045,200;2080,200",
|
||||
"nowNodeCode": "761c8e6e-169d-48f7-be85-1b3f1c3c1646",
|
||||
"nextNodeCode": "54e21807-9501-4e49-90b9-1104f359709e",
|
||||
"skipCondition": "lt@@day|3"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "1930,260",
|
||||
"formCustom": "N"
|
||||
},
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "ed4a73f7-5197-4362-a4c7-e6295ad211c4",
|
||||
"nodeType": 5,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "2355,260;2460,260",
|
||||
"nowNodeCode": "ed4a73f7-5197-4362-a4c7-e6295ad211c4",
|
||||
"nextNodeCode": "8b46aefa-c496-48c4-ae2c-381035f69dda"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "2330,260",
|
||||
"formCustom": "N"
|
||||
}
|
||||
],
|
||||
"formCustom": "N",
|
||||
"modelValue": "CLASSICS"
|
||||
}
|
||||
385
script/demo/demo_gateway_mimic.json
Normal file
385
script/demo/demo_gateway_mimic.json
Normal file
@ -0,0 +1,385 @@
|
||||
{
|
||||
"version": "1",
|
||||
"category": "1762300000000000100",
|
||||
"flowCode": "demo_gateway_mimic",
|
||||
"flowName": "网关综合-仿钉钉模式示例",
|
||||
"formPath": "/workflow/leaveEdit/index",
|
||||
"nodeList": [
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "start",
|
||||
"nodeName": "开始",
|
||||
"nodeType": 0,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "700,120;700,202",
|
||||
"nowNodeCode": "start",
|
||||
"nextNodeCode": "submit"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "700,100|700,100",
|
||||
"formCustom": "N"
|
||||
},
|
||||
{
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"copy,back,termination,file,subSign,addSign,transfer,trust\"}]",
|
||||
"nodeCode": "51ca4cb3-684b-4c3d-b474-9ec3363440bc",
|
||||
"nodeName": "第四个",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "550,698;550,782;682,800",
|
||||
"nowNodeCode": "51ca4cb3-684b-4c3d-b474-9ec3363440bc",
|
||||
"nextNodeCode": "17000bff-87ab-4b6d-babc-0f3c51b48858"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "100",
|
||||
"coordinate": "550,660|550,660",
|
||||
"formCustom": "N",
|
||||
"permissionFlag": "1761100000000000001@@1761100000000000003"
|
||||
},
|
||||
{
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"copy,back,termination,file\"}]",
|
||||
"nodeCode": "54e21807-9501-4e49-90b9-1104f359709e",
|
||||
"nodeName": "包容小于三",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "1150,1648;1150,1740;718,1740",
|
||||
"nowNodeCode": "54e21807-9501-4e49-90b9-1104f359709e",
|
||||
"nextNodeCode": "ed4a73f7-5197-4362-a4c7-e6295ad211c4"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "1150,1610|1150,1610",
|
||||
"formCustom": "N",
|
||||
"permissionFlag": "1761100000000000001"
|
||||
},
|
||||
{
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"copy,back,termination,file\"}]",
|
||||
"nodeCode": "79a20053-b41e-4f16-987d-5ac6e2a37a65",
|
||||
"nodeName": "包容4",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "850,1648;850,1740;718,1740",
|
||||
"nowNodeCode": "79a20053-b41e-4f16-987d-5ac6e2a37a65",
|
||||
"nextNodeCode": "ed4a73f7-5197-4362-a4c7-e6295ad211c4"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "850,1610|850,1610",
|
||||
"formCustom": "N",
|
||||
"permissionFlag": "1761100000000000004"
|
||||
},
|
||||
{
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"copy,back,termination,file\"}]",
|
||||
"nodeCode": "86d7c888-0428-4c0f-b462-6e4563c21daf",
|
||||
"nodeName": "并行一",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "550,1108;550,1172",
|
||||
"nowNodeCode": "86d7c888-0428-4c0f-b462-6e4563c21daf",
|
||||
"nextNodeCode": "8d4baa8d-b2ca-4de0-96df-33e46aa12bb4"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "550,1070|550,1070",
|
||||
"formCustom": "N",
|
||||
"permissionFlag": "1761100000000000001"
|
||||
},
|
||||
{
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"copy,back,termination,file\"}]",
|
||||
"nodeCode": "8b46aefa-c496-48c4-ae2c-381035f69dda",
|
||||
"nodeName": "最后一个",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "700,1908;700,1990",
|
||||
"nowNodeCode": "8b46aefa-c496-48c4-ae2c-381035f69dda",
|
||||
"nextNodeCode": "19c75cd4-36c3-48f7-96ad-9205f9337a2f"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "700,1870|700,1870",
|
||||
"formCustom": "N",
|
||||
"permissionFlag": "1761100000000000001"
|
||||
},
|
||||
{
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"copy,back,termination,file,subSign,addSign\"}]",
|
||||
"nodeCode": "8d4baa8d-b2ca-4de0-96df-33e46aa12bb4",
|
||||
"nodeName": "并行二",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "550,1248;550,1340;682,1340",
|
||||
"nowNodeCode": "8d4baa8d-b2ca-4de0-96df-33e46aa12bb4",
|
||||
"nextNodeCode": "ca78e892-b181-4d2e-afbe-21e0d1936fe5"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "60",
|
||||
"coordinate": "550,1210|550,1210",
|
||||
"formCustom": "N",
|
||||
"permissionFlag": "1761100000000000001@@1761100000000000003@@1761100000000000004"
|
||||
},
|
||||
{
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"copy,back,termination,file,transfer,trust,addSign,subSign\"}]",
|
||||
"nodeCode": "974a0d43-53a1-4384-8ee1-2f9665d5aa2d",
|
||||
"nodeName": "大于三天",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "550,558;550,622",
|
||||
"nowNodeCode": "974a0d43-53a1-4384-8ee1-2f9665d5aa2d",
|
||||
"nextNodeCode": "51ca4cb3-684b-4c3d-b474-9ec3363440bc"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "550,520|550,520",
|
||||
"formCustom": "N",
|
||||
"permissionFlag": "1761100000000000003"
|
||||
},
|
||||
{
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"copy,back,termination,file\"}]",
|
||||
"nodeCode": "b057d0fb-068d-47db-ae9e-8f4356600672",
|
||||
"nodeName": "包容3",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "550,1648;550,1740;682,1740",
|
||||
"nowNodeCode": "b057d0fb-068d-47db-ae9e-8f4356600672",
|
||||
"nextNodeCode": "ed4a73f7-5197-4362-a4c7-e6295ad211c4"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "550,1610|550,1610",
|
||||
"formCustom": "N",
|
||||
"permissionFlag": "1761100000000000001"
|
||||
},
|
||||
{
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"copy,back,termination,file,subSign,transfer,addSign,trust\"}]",
|
||||
"nodeCode": "dc06e24f-b67c-4268-b2d7-dea1941ef462",
|
||||
"nodeName": "小于三天",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "850,558;850,800;718,800",
|
||||
"nowNodeCode": "dc06e24f-b67c-4268-b2d7-dea1941ef462",
|
||||
"nextNodeCode": "17000bff-87ab-4b6d-babc-0f3c51b48858"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "850,520|850,520",
|
||||
"formCustom": "N",
|
||||
"permissionFlag": "1761100000000000001"
|
||||
},
|
||||
{
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"copy,back,termination,file\"}]",
|
||||
"nodeCode": "f3482139-ab8e-4f18-940a-d3298346caff",
|
||||
"nodeName": "包容day大于三",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "250,1648;250,1740;682,1740",
|
||||
"nowNodeCode": "f3482139-ab8e-4f18-940a-d3298346caff",
|
||||
"nextNodeCode": "ed4a73f7-5197-4362-a4c7-e6295ad211c4"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "250,1610|250,1610",
|
||||
"formCustom": "N",
|
||||
"permissionFlag": "1761100000000000003"
|
||||
},
|
||||
{
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"copy,back,termination,file\"}]",
|
||||
"nodeCode": "f6fc6c06-4d64-4ee6-8f6a-4c5212d01ccc",
|
||||
"nodeName": "并行一同级",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "850,1108;850,1340;718,1340",
|
||||
"nowNodeCode": "f6fc6c06-4d64-4ee6-8f6a-4c5212d01ccc",
|
||||
"nextNodeCode": "ca78e892-b181-4d2e-afbe-21e0d1936fe5"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "850,1070|850,1070",
|
||||
"formCustom": "N",
|
||||
"permissionFlag": "1761100000000000001"
|
||||
},
|
||||
{
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"copy,back,termination,file\"}]",
|
||||
"nodeCode": "submit",
|
||||
"nodeName": "申请人",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "700,278;700,362",
|
||||
"nowNodeCode": "submit",
|
||||
"nextNodeCode": "e9b6ac64-5deb-4af9-81f2-4b750b8b890a"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "700,240|700,240",
|
||||
"formCustom": "N",
|
||||
"permissionFlag": "warmFlowInitiator"
|
||||
},
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "19c75cd4-36c3-48f7-96ad-9205f9337a2f",
|
||||
"nodeName": "结束",
|
||||
"nodeType": 2,
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "700,2010|700,2010",
|
||||
"formCustom": "N"
|
||||
},
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "17000bff-87ab-4b6d-babc-0f3c51b48858",
|
||||
"nodeType": 3,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "700,818;700,912",
|
||||
"nowNodeCode": "17000bff-87ab-4b6d-babc-0f3c51b48858",
|
||||
"nextNodeCode": "ffa7942a-e0b4-42c8-9aa6-83ebb6208547"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "700,800|700,800",
|
||||
"formCustom": "N"
|
||||
},
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "e9b6ac64-5deb-4af9-81f2-4b750b8b890a",
|
||||
"nodeType": 3,
|
||||
"skipList": [
|
||||
{
|
||||
"skipName": "day>3",
|
||||
"skipType": "PASS",
|
||||
"coordinate": "682,380;550,380;550,482|550,410",
|
||||
"nowNodeCode": "e9b6ac64-5deb-4af9-81f2-4b750b8b890a",
|
||||
"nextNodeCode": "974a0d43-53a1-4384-8ee1-2f9665d5aa2d",
|
||||
"skipCondition": "gt@@day|3"
|
||||
},
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "718,380;850,380;850,482",
|
||||
"nowNodeCode": "e9b6ac64-5deb-4af9-81f2-4b750b8b890a",
|
||||
"nextNodeCode": "dc06e24f-b67c-4268-b2d7-dea1941ef462"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "700,380|700,380",
|
||||
"formCustom": "N"
|
||||
},
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "ca78e892-b181-4d2e-afbe-21e0d1936fe5",
|
||||
"nodeType": 4,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "700,1358;700,1452",
|
||||
"nowNodeCode": "ca78e892-b181-4d2e-afbe-21e0d1936fe5",
|
||||
"nextNodeCode": "761c8e6e-169d-48f7-be85-1b3f1c3c1646"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "700,1340|700,1340",
|
||||
"formCustom": "N"
|
||||
},
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "ffa7942a-e0b4-42c8-9aa6-83ebb6208547",
|
||||
"nodeType": 4,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "682,930;550,930;550,1032",
|
||||
"nowNodeCode": "ffa7942a-e0b4-42c8-9aa6-83ebb6208547",
|
||||
"nextNodeCode": "86d7c888-0428-4c0f-b462-6e4563c21daf"
|
||||
},
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "718,930;850,930;850,1032",
|
||||
"nowNodeCode": "ffa7942a-e0b4-42c8-9aa6-83ebb6208547",
|
||||
"nextNodeCode": "f6fc6c06-4d64-4ee6-8f6a-4c5212d01ccc"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "700,930|700,930",
|
||||
"formCustom": "N"
|
||||
},
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "761c8e6e-169d-48f7-be85-1b3f1c3c1646",
|
||||
"nodeType": 5,
|
||||
"skipList": [
|
||||
{
|
||||
"skipName": "day>3",
|
||||
"skipType": "PASS",
|
||||
"coordinate": "682,1470;250,1470;250,1572|250,1500",
|
||||
"nowNodeCode": "761c8e6e-169d-48f7-be85-1b3f1c3c1646",
|
||||
"nextNodeCode": "f3482139-ab8e-4f18-940a-d3298346caff",
|
||||
"skipCondition": "gt@@day|3"
|
||||
},
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "682,1470;550,1470;550,1572",
|
||||
"nowNodeCode": "761c8e6e-169d-48f7-be85-1b3f1c3c1646",
|
||||
"nextNodeCode": "b057d0fb-068d-47db-ae9e-8f4356600672"
|
||||
},
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "718,1470;850,1470;850,1572",
|
||||
"nowNodeCode": "761c8e6e-169d-48f7-be85-1b3f1c3c1646",
|
||||
"nextNodeCode": "79a20053-b41e-4f16-987d-5ac6e2a37a65"
|
||||
},
|
||||
{
|
||||
"skipName": "day<3",
|
||||
"skipType": "PASS",
|
||||
"coordinate": "718,1470;1150,1470;1150,1572|1150,1500",
|
||||
"nowNodeCode": "761c8e6e-169d-48f7-be85-1b3f1c3c1646",
|
||||
"nextNodeCode": "54e21807-9501-4e49-90b9-1104f359709e",
|
||||
"skipCondition": "lt@@day|3"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "700,1470|700,1470",
|
||||
"formCustom": "N"
|
||||
},
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "ed4a73f7-5197-4362-a4c7-e6295ad211c4",
|
||||
"nodeType": 5,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "700,1758;700,1832",
|
||||
"nowNodeCode": "ed4a73f7-5197-4362-a4c7-e6295ad211c4",
|
||||
"nextNodeCode": "8b46aefa-c496-48c4-ae2c-381035f69dda"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "700,1740|700,1740",
|
||||
"formCustom": "N"
|
||||
}
|
||||
],
|
||||
"formCustom": "N",
|
||||
"modelValue": "MIMIC"
|
||||
}
|
||||
281
script/demo/demo_service_task.json
Normal file
281
script/demo/demo_service_task.json
Normal file
@ -0,0 +1,281 @@
|
||||
{
|
||||
"version": "1",
|
||||
"category": "1762300000000000100",
|
||||
"flowCode": "demo_service_task",
|
||||
"flowName": "服务任务示例",
|
||||
"formPath": "/workflow/leaveEdit/index",
|
||||
"nodeList": [
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "start",
|
||||
"nodeName": "开始",
|
||||
"nodeType": 0,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "80,260;190,260",
|
||||
"nowNodeCode": "start",
|
||||
"nextNodeCode": "submit"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "60,260|60,260",
|
||||
"formCustom": "N"
|
||||
},
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "approve",
|
||||
"nodeName": "汇聚后审批",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "1730,260;1840,260",
|
||||
"nowNodeCode": "approve",
|
||||
"nextNodeCode": "end"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "1710,260|1710,260",
|
||||
"formCustom": "N",
|
||||
"permissionFlag": "1761100000000000003"
|
||||
},
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "bigDay",
|
||||
"nodeName": "大于三天",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "1130,100;1240,260",
|
||||
"nowNodeCode": "bigDay",
|
||||
"nextNodeCode": "forkP"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "1110,100|1110,100",
|
||||
"formCustom": "N",
|
||||
"permissionFlag": "1761100000000000003"
|
||||
},
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "humanBranch",
|
||||
"nodeName": "并行分支人工",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "1430,420;1540,260",
|
||||
"nowNodeCode": "humanBranch",
|
||||
"nextNodeCode": "joinP"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "1410,420|1410,420",
|
||||
"formCustom": "N",
|
||||
"permissionFlag": "1761100000000000004"
|
||||
},
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "smallDay",
|
||||
"nodeName": "小于等于三天",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "1130,420;1240,260",
|
||||
"nowNodeCode": "smallDay",
|
||||
"nextNodeCode": "forkP"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "1110,420|1110,420",
|
||||
"formCustom": "N",
|
||||
"permissionFlag": "1761100000000000004"
|
||||
},
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "end",
|
||||
"nodeName": "结束",
|
||||
"nodeType": 2,
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "1860,260|1860,260",
|
||||
"formCustom": "N"
|
||||
},
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "gwDay",
|
||||
"nodeName": "天数分支",
|
||||
"nodeType": 3,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "980,260;1090,100",
|
||||
"nowNodeCode": "gwDay",
|
||||
"nextNodeCode": "bigDay",
|
||||
"skipCondition": "gt@@day|3"
|
||||
},
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "980,260;1090,420",
|
||||
"nowNodeCode": "gwDay",
|
||||
"nextNodeCode": "smallDay"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "960,260|960,260",
|
||||
"formCustom": "N"
|
||||
},
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "forkP",
|
||||
"nodeName": "并行网关",
|
||||
"nodeType": 4,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "1280,260;1390,100",
|
||||
"nowNodeCode": "forkP",
|
||||
"nextNodeCode": "svcBranch"
|
||||
},
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "1280,260;1390,420",
|
||||
"nowNodeCode": "forkP",
|
||||
"nextNodeCode": "humanBranch"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "1260,260|1260,260",
|
||||
"formCustom": "N"
|
||||
},
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "joinP",
|
||||
"nodeName": "汇聚网关",
|
||||
"nodeType": 4,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "1580,260;1690,260",
|
||||
"nowNodeCode": "joinP",
|
||||
"nextNodeCode": "approve"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "1560,260|1560,260",
|
||||
"formCustom": "N"
|
||||
},
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "svcBranch",
|
||||
"nodeName": "并行分支服务任务",
|
||||
"nodeType": 6,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "1430,100;1540,260",
|
||||
"nowNodeCode": "svcBranch",
|
||||
"nextNodeCode": "joinP"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "1410,100|1410,100",
|
||||
"formCustom": "N",
|
||||
"nodeConfig": "{\"serviceTask\":{\"type\":\"class\",\"handler\":\"org.dromara.workflow.demo.DemoClassServiceTask\"}}"
|
||||
},
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "svcCalc",
|
||||
"nodeName": "计算天数服务任务",
|
||||
"nodeType": 6,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "830,260;940,260",
|
||||
"nowNodeCode": "svcCalc",
|
||||
"nextNodeCode": "gwDay"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "810,260|810,260",
|
||||
"formCustom": "N",
|
||||
"nodeConfig": "{\"serviceTask\":{\"type\":\"expression\",\"expression\":\"#{@demoOrderService.evalDay(#execution)}\",\"resultVariable\":\"day\"}}"
|
||||
},
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "svcClass",
|
||||
"nodeName": "Java 类服务任务",
|
||||
"nodeType": 6,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "380,260;490,260",
|
||||
"nowNodeCode": "svcClass",
|
||||
"nextNodeCode": "svcDelegate"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "360,260|360,260",
|
||||
"formCustom": "N",
|
||||
"nodeConfig": "{\"serviceTask\":{\"type\":\"class\",\"handler\":\"org.dromara.workflow.demo.DemoClassServiceTask\"}}"
|
||||
},
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "svcDelegate",
|
||||
"nodeName": "Bean 委托表达式服务任务",
|
||||
"nodeType": 6,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "530,260;640,260",
|
||||
"nowNodeCode": "svcDelegate",
|
||||
"nextNodeCode": "svcExpression"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "510,260|510,260",
|
||||
"formCustom": "N",
|
||||
"nodeConfig": "{\"serviceTask\":{\"type\":\"delegateExpression\",\"expression\":\"#{@demoDelegateServiceTask}\"}}"
|
||||
},
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "svcExpression",
|
||||
"nodeName": "方法表达式服务任务",
|
||||
"nodeType": 6,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "680,260;790,260",
|
||||
"nowNodeCode": "svcExpression",
|
||||
"nextNodeCode": "svcCalc"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "660,260|660,260",
|
||||
"formCustom": "N",
|
||||
"nodeConfig": "{\"serviceTask\":{\"type\":\"expression\",\"expression\":\"#{@demoOrderService.createOrder(#execution)}\",\"resultVariable\":\"orderNo\"}}"
|
||||
},
|
||||
{
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"copy,back,termination,file\"}]",
|
||||
"nodeCode": "submit",
|
||||
"nodeName": "申请人",
|
||||
"nodeType": 1,
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "210,260|210,260",
|
||||
"formCustom": "N",
|
||||
"permissionFlag": "warmFlowInitiator",
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "230,260;340,260",
|
||||
"nowNodeCode": "submit",
|
||||
"nextNodeCode": "svcClass"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"formCustom": "N",
|
||||
"modelValue": "CLASSICS"
|
||||
}
|
||||
194
script/demo/demo_timer_start.json
Normal file
194
script/demo/demo_timer_start.json
Normal file
@ -0,0 +1,194 @@
|
||||
{
|
||||
"version": "1",
|
||||
"category": "1762300000000000100",
|
||||
"flowCode": "demo_timer_start",
|
||||
"flowName": "定时启动示例(发布 30 秒后自动发起·带默认变量)",
|
||||
"formPath": "/workflow/leaveEdit/index",
|
||||
"nodeList": [
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "start",
|
||||
"nodeName": "开始",
|
||||
"nodeType": 0,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "88,260;190,260",
|
||||
"nowNodeCode": "start",
|
||||
"nextNodeCode": "timerStart"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "60,260|60,260",
|
||||
"formCustom": "N"
|
||||
},
|
||||
{
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"copy,back,termination,file\"}]",
|
||||
"nodeCode": "inspect",
|
||||
"nodeName": "执行数据巡检",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "470,260;555,260",
|
||||
"nowNodeCode": "inspect",
|
||||
"nextNodeCode": "gw1"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "420,260|420,260",
|
||||
"formCustom": "N",
|
||||
"permissionFlag": "1761100000000000001"
|
||||
},
|
||||
{
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"copy,back,termination,file\"}]",
|
||||
"nodeCode": "qa",
|
||||
"nodeName": "质检复核",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "830,120;1020,120;1020,235",
|
||||
"nowNodeCode": "qa",
|
||||
"nextNodeCode": "gw2"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "780,120|780,120",
|
||||
"formCustom": "N",
|
||||
"permissionFlag": "1761100000000000003"
|
||||
},
|
||||
{
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"copy,back,termination,file\"}]",
|
||||
"nodeCode": "risk",
|
||||
"nodeName": "风控否决判定",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "830,400;870,400",
|
||||
"nowNodeCode": "risk",
|
||||
"nextNodeCode": "gwRisk"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "780,400|780,400",
|
||||
"formCustom": "N",
|
||||
"permissionFlag": "1761100000000000004"
|
||||
},
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "terminate",
|
||||
"nodeName": "严重异常终止",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "1070,400;1220,400;1220,288",
|
||||
"nowNodeCode": "terminate",
|
||||
"nextNodeCode": "end"
|
||||
}
|
||||
],
|
||||
"eventType": "TERMINATE_END",
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "1020,400|1020,400",
|
||||
"formCustom": "N"
|
||||
},
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "timerStart",
|
||||
"nodeName": "发布 30 秒后自动发起",
|
||||
"nodeType": 1,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "290,260;370,260",
|
||||
"nowNodeCode": "timerStart",
|
||||
"nextNodeCode": "inspect"
|
||||
}
|
||||
],
|
||||
"eventType": "TIMER_START",
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "240,260|240,260",
|
||||
"formCustom": "N",
|
||||
"nodeConfig": "{\"variables\": {\"veto\": 0, \"channel\": \"daily\"}, \"event\": {\"timerType\": \"AFTER\", \"timerValue\": \"PT30S\", \"timezone\": \"Asia/Shanghai\"}}"
|
||||
},
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "end",
|
||||
"nodeName": "结束",
|
||||
"nodeType": 2,
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "1220,260|1220,260",
|
||||
"formCustom": "N"
|
||||
},
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "gwRisk",
|
||||
"nodeName": "是否严重异常",
|
||||
"nodeType": 3,
|
||||
"skipList": [
|
||||
{
|
||||
"skipName": "严重异常",
|
||||
"skipType": "PASS",
|
||||
"coordinate": "925,400;970,400",
|
||||
"nowNodeCode": "gwRisk",
|
||||
"nextNodeCode": "terminate",
|
||||
"skipCondition": "eq@@veto|1"
|
||||
},
|
||||
{
|
||||
"skipName": "无异常",
|
||||
"skipType": "PASS",
|
||||
"coordinate": "900,378;900,260;995,260",
|
||||
"nowNodeCode": "gwRisk",
|
||||
"nextNodeCode": "gw2"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "900,400",
|
||||
"formCustom": "N"
|
||||
},
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "gw1",
|
||||
"nodeName": "并行分支",
|
||||
"nodeType": 4,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "605,260;700,260;700,120;730,120",
|
||||
"nowNodeCode": "gw1",
|
||||
"nextNodeCode": "qa"
|
||||
},
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "605,260;700,260;700,400;730,400",
|
||||
"nowNodeCode": "gw1",
|
||||
"nextNodeCode": "risk"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "580,260",
|
||||
"formCustom": "N"
|
||||
},
|
||||
{
|
||||
"ext": "[]",
|
||||
"nodeCode": "gw2",
|
||||
"nodeName": "汇聚",
|
||||
"nodeType": 4,
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"coordinate": "1045,260;1192,260",
|
||||
"nowNodeCode": "gw2",
|
||||
"nextNodeCode": "end"
|
||||
}
|
||||
],
|
||||
"nodeRatio": "0",
|
||||
"coordinate": "1020,260",
|
||||
"formCustom": "N"
|
||||
}
|
||||
],
|
||||
"formCustom": "N",
|
||||
"modelValue": "CLASSICS"
|
||||
}
|
||||
@ -1,129 +0,0 @@
|
||||
{
|
||||
"nodeList": [
|
||||
{
|
||||
"nodeType": "0",
|
||||
"nodeCode": "d5ee3ddf-3968-4379-a86f-9ceabde5faac",
|
||||
"nodeName": "开始",
|
||||
"permissionFlag": null,
|
||||
"nodeRatio": "0.000",
|
||||
"anyNodeSkip": null,
|
||||
"listenerType": null,
|
||||
"listenerPath": null,
|
||||
"formCustom": "N",
|
||||
"formPath": null,
|
||||
"ext": "[]",
|
||||
"coordinate": "200,200|200,200",
|
||||
"version": "1",
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"skipCondition": null,
|
||||
"skipName": null,
|
||||
"nowNodeCode": "d5ee3ddf-3968-4379-a86f-9ceabde5faac",
|
||||
"nextNodeCode": "dd515cdd-59f6-446f-94ca-25ca062afb42",
|
||||
"coordinate": "220,200;310,200"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"nodeType": "1",
|
||||
"nodeCode": "dd515cdd-59f6-446f-94ca-25ca062afb42",
|
||||
"nodeName": "申请人",
|
||||
"permissionFlag": "${initiator}",
|
||||
"nodeRatio": "0.000",
|
||||
"anyNodeSkip": null,
|
||||
"listenerType": "",
|
||||
"listenerPath": "",
|
||||
"formCustom": "N",
|
||||
"formPath": null,
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file,copy\"}]",
|
||||
"coordinate": "360,200|360,200",
|
||||
"version": "1",
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"skipCondition": null,
|
||||
"skipName": null,
|
||||
"nowNodeCode": "dd515cdd-59f6-446f-94ca-25ca062afb42",
|
||||
"nextNodeCode": "78fa8e5b-e809-44ed-978a-41092409ebcf",
|
||||
"coordinate": "410,200;490,200"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"nodeType": "1",
|
||||
"nodeCode": "78fa8e5b-e809-44ed-978a-41092409ebcf",
|
||||
"nodeName": "组长",
|
||||
"permissionFlag": "role:1761300000000000001",
|
||||
"nodeRatio": "0.000",
|
||||
"anyNodeSkip": null,
|
||||
"listenerType": "",
|
||||
"listenerPath": "",
|
||||
"formCustom": "N",
|
||||
"formPath": null,
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,copy,transfer,trust,file\"}]",
|
||||
"coordinate": "540,200|540,200",
|
||||
"version": "1",
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"skipCondition": null,
|
||||
"skipName": null,
|
||||
"nowNodeCode": "78fa8e5b-e809-44ed-978a-41092409ebcf",
|
||||
"nextNodeCode": "a8abf15f-b83e-428a-86cc-033555ea9bbe",
|
||||
"coordinate": "590,200;670,200"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"nodeType": "1",
|
||||
"nodeCode": "a8abf15f-b83e-428a-86cc-033555ea9bbe",
|
||||
"nodeName": "部门主管",
|
||||
"permissionFlag": "role:1761300000000000003@@role:1761300000000000004",
|
||||
"nodeRatio": "0.000",
|
||||
"anyNodeSkip": null,
|
||||
"listenerType": "",
|
||||
"listenerPath": "",
|
||||
"formCustom": "N",
|
||||
"formPath": null,
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,copy,transfer,trust,file\"}]",
|
||||
"coordinate": "720,200|720,200",
|
||||
"version": "1",
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"skipCondition": null,
|
||||
"skipName": null,
|
||||
"nowNodeCode": "a8abf15f-b83e-428a-86cc-033555ea9bbe",
|
||||
"nextNodeCode": "8b82b7d7-8660-455e-b880-d6d22ea3eb6d",
|
||||
"coordinate": "770,200;880,200"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"nodeType": "2",
|
||||
"nodeCode": "8b82b7d7-8660-455e-b880-d6d22ea3eb6d",
|
||||
"nodeName": "结束",
|
||||
"permissionFlag": null,
|
||||
"nodeRatio": "0.000",
|
||||
"anyNodeSkip": null,
|
||||
"listenerType": null,
|
||||
"listenerPath": null,
|
||||
"formCustom": "N",
|
||||
"formPath": null,
|
||||
"ext": "[]",
|
||||
"coordinate": "900,200|900,200",
|
||||
"version": "1",
|
||||
"skipList": []
|
||||
}
|
||||
],
|
||||
"flowCode": "leave1",
|
||||
"flowName": "请假申请-普通",
|
||||
"modelValue": "CLASSICS",
|
||||
"category": "1762300000000000103",
|
||||
"version": "1",
|
||||
"formCustom": "N",
|
||||
"formPath": "/workflow/leaveEdit/index",
|
||||
"listenerType": null,
|
||||
"listenerPath": null
|
||||
}
|
||||
@ -1,187 +0,0 @@
|
||||
{
|
||||
"nodeList": [
|
||||
{
|
||||
"nodeType": "0",
|
||||
"nodeCode": "cef3895c-f7d8-4598-8bf3-8ec2ef6ce84a",
|
||||
"nodeName": "开始",
|
||||
"permissionFlag": null,
|
||||
"nodeRatio": "0.000",
|
||||
"anyNodeSkip": null,
|
||||
"listenerType": null,
|
||||
"listenerPath": null,
|
||||
"formCustom": "N",
|
||||
"formPath": null,
|
||||
"ext": "[]",
|
||||
"coordinate": "300,240|300,240",
|
||||
"version": "1",
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"skipCondition": null,
|
||||
"skipName": null,
|
||||
"nowNodeCode": "cef3895c-f7d8-4598-8bf3-8ec2ef6ce84a",
|
||||
"nextNodeCode": "fdcae93b-b69c-498a-b231-09255e74bcbd",
|
||||
"coordinate": "320,240;390,240"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"nodeType": "1",
|
||||
"nodeCode": "fdcae93b-b69c-498a-b231-09255e74bcbd",
|
||||
"nodeName": "申请人",
|
||||
"permissionFlag": "${initiator}",
|
||||
"nodeRatio": "0.000",
|
||||
"anyNodeSkip": null,
|
||||
"listenerType": "",
|
||||
"listenerPath": "",
|
||||
"formCustom": "N",
|
||||
"formPath": null,
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file\"}]",
|
||||
"coordinate": "440,240|440,240",
|
||||
"version": "1",
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"skipCondition": null,
|
||||
"skipName": null,
|
||||
"nowNodeCode": "fdcae93b-b69c-498a-b231-09255e74bcbd",
|
||||
"nextNodeCode": "7b8c7ead-7dc8-4951-a7f3-f0c41995909e",
|
||||
"coordinate": "490,240;535,240"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"nodeType": "3",
|
||||
"nodeCode": "7b8c7ead-7dc8-4951-a7f3-f0c41995909e",
|
||||
"permissionFlag": null,
|
||||
"nodeRatio": "0.000",
|
||||
"anyNodeSkip": null,
|
||||
"listenerType": null,
|
||||
"listenerPath": null,
|
||||
"formCustom": "N",
|
||||
"formPath": null,
|
||||
"ext": "[]",
|
||||
"coordinate": "560,240",
|
||||
"version": "1",
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"skipCondition": "le@@leaveDays|2",
|
||||
"skipName": null,
|
||||
"nowNodeCode": "7b8c7ead-7dc8-4951-a7f3-f0c41995909e",
|
||||
"nextNodeCode": "b3528155-dcb7-4445-bbdf-3d00e3499e86",
|
||||
"coordinate": "560,265;560,320;670,320"
|
||||
},
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"skipCondition": "gt@@leaveDays|2",
|
||||
"skipName": "大于两天",
|
||||
"nowNodeCode": "7b8c7ead-7dc8-4951-a7f3-f0c41995909e",
|
||||
"nextNodeCode": "5ed2362b-fc0c-4d52-831f-95208b830605",
|
||||
"coordinate": "560,215;560,160;670,160|560,187"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"nodeType": "1",
|
||||
"nodeCode": "b3528155-dcb7-4445-bbdf-3d00e3499e86",
|
||||
"nodeName": "组长",
|
||||
"permissionFlag": "1761100000000000003@@1761100000000000004",
|
||||
"nodeRatio": "0.000",
|
||||
"anyNodeSkip": null,
|
||||
"listenerType": "",
|
||||
"listenerPath": "",
|
||||
"formCustom": "N",
|
||||
"formPath": null,
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file,transfer,trust,copy\"}]",
|
||||
"coordinate": "720,320|720,320",
|
||||
"version": "1",
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"skipCondition": null,
|
||||
"skipName": null,
|
||||
"nowNodeCode": "b3528155-dcb7-4445-bbdf-3d00e3499e86",
|
||||
"nextNodeCode": "c9fa6d7d-2a74-4e78-b947-0cad8a6af869",
|
||||
"coordinate": "770,320;860,320;860,280"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"nodeType": "1",
|
||||
"nodeCode": "c9fa6d7d-2a74-4e78-b947-0cad8a6af869",
|
||||
"nodeName": "总经理",
|
||||
"permissionFlag": "role:1761300000000000001",
|
||||
"nodeRatio": "0.000",
|
||||
"anyNodeSkip": null,
|
||||
"listenerType": "",
|
||||
"listenerPath": "",
|
||||
"formCustom": "N",
|
||||
"formPath": null,
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file,transfer,trust,copy\"}]",
|
||||
"coordinate": "860,240|860,240",
|
||||
"version": "1",
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"skipCondition": null,
|
||||
"skipName": null,
|
||||
"nowNodeCode": "c9fa6d7d-2a74-4e78-b947-0cad8a6af869",
|
||||
"nextNodeCode": "40aa65fd-0712-4d23-b6f7-d0432b920fd1",
|
||||
"coordinate": "910,240;980,240"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"nodeType": "2",
|
||||
"nodeCode": "40aa65fd-0712-4d23-b6f7-d0432b920fd1",
|
||||
"nodeName": "结束",
|
||||
"permissionFlag": null,
|
||||
"nodeRatio": "0.000",
|
||||
"anyNodeSkip": null,
|
||||
"listenerType": null,
|
||||
"listenerPath": null,
|
||||
"formCustom": "N",
|
||||
"formPath": null,
|
||||
"ext": "[]",
|
||||
"coordinate": "1000,240|1000,240",
|
||||
"version": "1",
|
||||
"skipList": []
|
||||
},
|
||||
{
|
||||
"nodeType": "1",
|
||||
"nodeCode": "5ed2362b-fc0c-4d52-831f-95208b830605",
|
||||
"nodeName": "部门领导",
|
||||
"permissionFlag": "role:1761300000000000001",
|
||||
"nodeRatio": "0.000",
|
||||
"anyNodeSkip": null,
|
||||
"listenerType": "",
|
||||
"listenerPath": "",
|
||||
"formCustom": "N",
|
||||
"formPath": null,
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file,transfer,trust,copy\"}]",
|
||||
"coordinate": "720,160|720,160",
|
||||
"version": "1",
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"skipCondition": null,
|
||||
"skipName": null,
|
||||
"nowNodeCode": "5ed2362b-fc0c-4d52-831f-95208b830605",
|
||||
"nextNodeCode": "c9fa6d7d-2a74-4e78-b947-0cad8a6af869",
|
||||
"nextNodeType": "1",
|
||||
"coordinate": "770,160;860,160;860,200"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"flowCode": "leave2",
|
||||
"flowName": "请假申请-排他网关",
|
||||
"modelValue": "CLASSICS",
|
||||
"category": "1762300000000000103",
|
||||
"version": "1",
|
||||
"formCustom": "N",
|
||||
"formPath": "/workflow/leaveEdit/index",
|
||||
"listenerType": null,
|
||||
"listenerPath": null
|
||||
}
|
||||
@ -1,211 +0,0 @@
|
||||
{
|
||||
"nodeList": [
|
||||
{
|
||||
"nodeType": "0",
|
||||
"nodeCode": "a80ecf9f-f465-4ae5-a429-e30ec5d0f957",
|
||||
"nodeName": "开始",
|
||||
"permissionFlag": null,
|
||||
"nodeRatio": "0.000",
|
||||
"anyNodeSkip": null,
|
||||
"listenerType": null,
|
||||
"listenerPath": null,
|
||||
"formCustom": "N",
|
||||
"formPath": null,
|
||||
"ext": "[]",
|
||||
"coordinate": "380,220|380,220",
|
||||
"version": "1",
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"skipCondition": null,
|
||||
"skipName": null,
|
||||
"nowNodeCode": "a80ecf9f-f465-4ae5-a429-e30ec5d0f957",
|
||||
"nextNodeCode": "b7bbb571-06de-455c-8083-f83c07bf0b99",
|
||||
"coordinate": "400,220;470,220"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"nodeType": "1",
|
||||
"nodeCode": "b7bbb571-06de-455c-8083-f83c07bf0b99",
|
||||
"nodeName": "申请人",
|
||||
"permissionFlag": "${initiator}",
|
||||
"nodeRatio": "0.000",
|
||||
"anyNodeSkip": null,
|
||||
"listenerType": "",
|
||||
"listenerPath": "",
|
||||
"formCustom": "N",
|
||||
"formPath": null,
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file\"}]",
|
||||
"coordinate": "520,220|520,220",
|
||||
"version": "1",
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"skipCondition": null,
|
||||
"skipName": null,
|
||||
"nowNodeCode": "b7bbb571-06de-455c-8083-f83c07bf0b99",
|
||||
"nextNodeCode": "84d7ed24-bb44-4ba1-bf1f-e6f5092d3f0a",
|
||||
"coordinate": "570,220;655,220"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"nodeType": "4",
|
||||
"nodeCode": "84d7ed24-bb44-4ba1-bf1f-e6f5092d3f0a",
|
||||
"permissionFlag": null,
|
||||
"nodeRatio": "0.000",
|
||||
"anyNodeSkip": null,
|
||||
"listenerType": null,
|
||||
"listenerPath": null,
|
||||
"formCustom": "N",
|
||||
"formPath": null,
|
||||
"ext": "[]",
|
||||
"coordinate": "680,220",
|
||||
"version": "1",
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"skipCondition": null,
|
||||
"skipName": null,
|
||||
"nowNodeCode": "84d7ed24-bb44-4ba1-bf1f-e6f5092d3f0a",
|
||||
"nextNodeCode": "4b7743cd-940c-431b-926f-e7b614fbf1fe",
|
||||
"coordinate": "680,195;680,140;750,140"
|
||||
},
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"skipCondition": null,
|
||||
"skipName": null,
|
||||
"nowNodeCode": "84d7ed24-bb44-4ba1-bf1f-e6f5092d3f0a",
|
||||
"nextNodeCode": "762cb975-37d8-4276-b6db-79a4c3606394",
|
||||
"coordinate": "680,245;680,300;750,300"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"nodeType": "1",
|
||||
"nodeCode": "4b7743cd-940c-431b-926f-e7b614fbf1fe",
|
||||
"nodeName": "市场部",
|
||||
"permissionFlag": "role:1761300000000000001",
|
||||
"nodeRatio": "0.000",
|
||||
"anyNodeSkip": null,
|
||||
"listenerType": "",
|
||||
"listenerPath": "",
|
||||
"formCustom": "N",
|
||||
"formPath": null,
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file,transfer,trust,copy\"}]",
|
||||
"coordinate": "800,140|800,140",
|
||||
"version": "1",
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"skipCondition": null,
|
||||
"skipName": null,
|
||||
"nowNodeCode": "4b7743cd-940c-431b-926f-e7b614fbf1fe",
|
||||
"nextNodeCode": "b66b6563-f9fe-41cc-a782-f7837bb6f3d2",
|
||||
"coordinate": "850,140;920,140;920,195"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"nodeType": "4",
|
||||
"nodeCode": "b66b6563-f9fe-41cc-a782-f7837bb6f3d2",
|
||||
"permissionFlag": null,
|
||||
"nodeRatio": "0.000",
|
||||
"anyNodeSkip": null,
|
||||
"listenerType": null,
|
||||
"listenerPath": null,
|
||||
"formCustom": "N",
|
||||
"formPath": null,
|
||||
"ext": "[]",
|
||||
"coordinate": "920,220",
|
||||
"version": "1",
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"skipCondition": null,
|
||||
"skipName": null,
|
||||
"nowNodeCode": "b66b6563-f9fe-41cc-a782-f7837bb6f3d2",
|
||||
"nextNodeCode": "23e7429e-2b47-4431-b93e-40db7c431ce6",
|
||||
"coordinate": "945,220;975,220;975,220;960,220;960,220;990,220"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"nodeType": "1",
|
||||
"nodeCode": "23e7429e-2b47-4431-b93e-40db7c431ce6",
|
||||
"nodeName": "CEO",
|
||||
"permissionFlag": "1761100000000000001",
|
||||
"nodeRatio": "0.000",
|
||||
"anyNodeSkip": null,
|
||||
"listenerType": "",
|
||||
"listenerPath": "",
|
||||
"formCustom": "N",
|
||||
"formPath": null,
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file,transfer,trust,copy\"}]",
|
||||
"coordinate": "1040,220|1040,220",
|
||||
"version": "1",
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"skipCondition": null,
|
||||
"skipName": null,
|
||||
"nowNodeCode": "23e7429e-2b47-4431-b93e-40db7c431ce6",
|
||||
"nextNodeCode": "f5ace37f-5a5e-4e64-a6f6-913ab9a71cd1",
|
||||
"coordinate": "1090,220;1140,220"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"nodeType": "2",
|
||||
"nodeCode": "f5ace37f-5a5e-4e64-a6f6-913ab9a71cd1",
|
||||
"nodeName": "结束",
|
||||
"permissionFlag": null,
|
||||
"nodeRatio": "0.000",
|
||||
"anyNodeSkip": null,
|
||||
"listenerType": null,
|
||||
"listenerPath": null,
|
||||
"formCustom": "N",
|
||||
"formPath": null,
|
||||
"ext": "[]",
|
||||
"coordinate": "1160,220|1160,220",
|
||||
"version": "1",
|
||||
"skipList": []
|
||||
},
|
||||
{
|
||||
"nodeType": "1",
|
||||
"nodeCode": "762cb975-37d8-4276-b6db-79a4c3606394",
|
||||
"nodeName": "综合部",
|
||||
"permissionFlag": "role:1761300000000000003@@role:1761300000000000004",
|
||||
"nodeRatio": "0.000",
|
||||
"anyNodeSkip": null,
|
||||
"listenerType": "",
|
||||
"listenerPath": "",
|
||||
"formCustom": "N",
|
||||
"formPath": null,
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file,transfer,trust,copy\"}]",
|
||||
"coordinate": "800,300|800,300",
|
||||
"version": "1",
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"skipCondition": null,
|
||||
"skipName": null,
|
||||
"nowNodeCode": "762cb975-37d8-4276-b6db-79a4c3606394",
|
||||
"nextNodeCode": "b66b6563-f9fe-41cc-a782-f7837bb6f3d2",
|
||||
"nextNodeType": "4",
|
||||
"coordinate": "850,300;920,300;920,245"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"flowCode": "leave3",
|
||||
"flowName": "请假申请-并行网关",
|
||||
"modelValue": "CLASSICS",
|
||||
"category": "1762300000000000103",
|
||||
"version": "1",
|
||||
"formCustom": "N",
|
||||
"formPath": "/workflow/leaveEdit/index",
|
||||
"listenerType": null,
|
||||
"listenerPath": null
|
||||
}
|
||||
@ -1,154 +0,0 @@
|
||||
{
|
||||
"nodeList": [
|
||||
{
|
||||
"nodeType": "0",
|
||||
"nodeCode": "9ce8bf00-f25b-4fc6-91b8-827082fc4876",
|
||||
"nodeName": "开始",
|
||||
"permissionFlag": null,
|
||||
"nodeRatio": "0.000",
|
||||
"anyNodeSkip": null,
|
||||
"listenerType": null,
|
||||
"listenerPath": null,
|
||||
"formCustom": "N",
|
||||
"formPath": null,
|
||||
"ext": "[]",
|
||||
"coordinate": "320,240|320,240",
|
||||
"version": "1",
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"skipCondition": null,
|
||||
"skipName": null,
|
||||
"nowNodeCode": "9ce8bf00-f25b-4fc6-91b8-827082fc4876",
|
||||
"nextNodeCode": "e90b98ef-35b4-410c-a663-bae8b7624b9f",
|
||||
"coordinate": "340,240;410,240"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"nodeType": "1",
|
||||
"nodeCode": "e90b98ef-35b4-410c-a663-bae8b7624b9f",
|
||||
"nodeName": "申请人",
|
||||
"permissionFlag": "${initiator}",
|
||||
"nodeRatio": "0.000",
|
||||
"anyNodeSkip": null,
|
||||
"listenerType": "",
|
||||
"listenerPath": "",
|
||||
"formCustom": "N",
|
||||
"formPath": null,
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file\"}]",
|
||||
"coordinate": "460,240|460,240",
|
||||
"version": "1",
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"skipCondition": null,
|
||||
"skipName": null,
|
||||
"nowNodeCode": "e90b98ef-35b4-410c-a663-bae8b7624b9f",
|
||||
"nextNodeCode": "768b5b1a-6726-4d67-8853-4cc70d5b1045",
|
||||
"coordinate": "510,240;590,240"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"nodeType": "1",
|
||||
"nodeCode": "768b5b1a-6726-4d67-8853-4cc70d5b1045",
|
||||
"nodeName": "百分之60通过",
|
||||
"permissionFlag": "${userList}",
|
||||
"nodeRatio": "60.000",
|
||||
"anyNodeSkip": null,
|
||||
"listenerType": "",
|
||||
"listenerPath": "",
|
||||
"formCustom": "N",
|
||||
"formPath": null,
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file,addSign,subSign\"}]",
|
||||
"coordinate": "640,240|640,240",
|
||||
"version": "1",
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"skipCondition": null,
|
||||
"skipName": null,
|
||||
"nowNodeCode": "768b5b1a-6726-4d67-8853-4cc70d5b1045",
|
||||
"nextNodeCode": "2f9f2e21-9bcf-42a3-a07c-13037aad22d1",
|
||||
"coordinate": "690,240;770,240"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"nodeType": "1",
|
||||
"nodeCode": "2f9f2e21-9bcf-42a3-a07c-13037aad22d1",
|
||||
"nodeName": "全部审批通过",
|
||||
"permissionFlag": "role:1761300000000000001@@role:1761300000000000003",
|
||||
"nodeRatio": "100.000",
|
||||
"anyNodeSkip": null,
|
||||
"listenerType": "",
|
||||
"listenerPath": "",
|
||||
"formCustom": "N",
|
||||
"formPath": null,
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file,addSign,subSign\"}]",
|
||||
"coordinate": "820,240|820,240",
|
||||
"version": "1",
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"skipCondition": null,
|
||||
"skipName": null,
|
||||
"nowNodeCode": "2f9f2e21-9bcf-42a3-a07c-13037aad22d1",
|
||||
"nextNodeCode": "27461e01-3d9f-4530-8fe3-bd5ec7f9571f",
|
||||
"coordinate": "870,240;950,240"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"nodeType": "1",
|
||||
"nodeCode": "27461e01-3d9f-4530-8fe3-bd5ec7f9571f",
|
||||
"nodeName": "CEO",
|
||||
"permissionFlag": "1761100000000000001",
|
||||
"nodeRatio": "0.000",
|
||||
"anyNodeSkip": null,
|
||||
"listenerType": "",
|
||||
"listenerPath": "",
|
||||
"formCustom": "N",
|
||||
"formPath": null,
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file,transfer,trust,copy\"}]",
|
||||
"coordinate": "1000,240|1000,240",
|
||||
"version": "1",
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"skipCondition": null,
|
||||
"skipName": null,
|
||||
"nowNodeCode": "27461e01-3d9f-4530-8fe3-bd5ec7f9571f",
|
||||
"nextNodeCode": "b62b88c3-8d8d-4969-911e-2aaea219e7fc",
|
||||
"coordinate": "1050,240;1080,240;1080,240;1070,240;1070,240;1100,240"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"nodeType": "2",
|
||||
"nodeCode": "b62b88c3-8d8d-4969-911e-2aaea219e7fc",
|
||||
"nodeName": "结束",
|
||||
"permissionFlag": null,
|
||||
"nodeRatio": "0.000",
|
||||
"anyNodeSkip": null,
|
||||
"listenerType": null,
|
||||
"listenerPath": null,
|
||||
"formCustom": "N",
|
||||
"formPath": null,
|
||||
"ext": "[]",
|
||||
"coordinate": "1120,240|1120,240",
|
||||
"version": "1",
|
||||
"skipList": []
|
||||
}
|
||||
],
|
||||
"flowCode": "leave4",
|
||||
"flowName": "请假申请-会签",
|
||||
"modelValue": "CLASSICS",
|
||||
"category": "1762300000000000103",
|
||||
"version": "1",
|
||||
"formCustom": "N",
|
||||
"formPath": "/workflow/leaveEdit/index",
|
||||
"listenerType": null,
|
||||
"listenerPath": null
|
||||
}
|
||||
@ -1,211 +0,0 @@
|
||||
{
|
||||
"nodeList": [
|
||||
{
|
||||
"nodeType": "0",
|
||||
"nodeCode": "ebebaf26-9cb6-497e-8119-4c9fed4c597c",
|
||||
"nodeName": "开始",
|
||||
"permissionFlag": null,
|
||||
"nodeRatio": "0.000",
|
||||
"anyNodeSkip": null,
|
||||
"listenerType": null,
|
||||
"listenerPath": null,
|
||||
"formCustom": "N",
|
||||
"formPath": null,
|
||||
"ext": "[]",
|
||||
"coordinate": "300,220|300,220",
|
||||
"version": "1",
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"skipCondition": null,
|
||||
"skipName": null,
|
||||
"nowNodeCode": "ebebaf26-9cb6-497e-8119-4c9fed4c597c",
|
||||
"nextNodeCode": "e1b04e96-dc81-4858-a309-2fe945d2f374",
|
||||
"coordinate": "320,220;350,220;350,220;340,220;340,220;370,220"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"nodeType": "1",
|
||||
"nodeCode": "e1b04e96-dc81-4858-a309-2fe945d2f374",
|
||||
"nodeName": "申请人",
|
||||
"permissionFlag": "${initiator}",
|
||||
"nodeRatio": "0.000",
|
||||
"anyNodeSkip": null,
|
||||
"listenerType": "",
|
||||
"listenerPath": "",
|
||||
"formCustom": "N",
|
||||
"formPath": null,
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file\"}]",
|
||||
"coordinate": "420,220|420,220",
|
||||
"version": "1",
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"skipCondition": null,
|
||||
"skipName": null,
|
||||
"nowNodeCode": "e1b04e96-dc81-4858-a309-2fe945d2f374",
|
||||
"nextNodeCode": "3e743f4f-51ca-41d4-8e94-21f5dd9b59c9",
|
||||
"coordinate": "470,220;535,220"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"nodeType": "4",
|
||||
"nodeCode": "3e743f4f-51ca-41d4-8e94-21f5dd9b59c9",
|
||||
"permissionFlag": null,
|
||||
"nodeRatio": "0.000",
|
||||
"anyNodeSkip": null,
|
||||
"listenerType": null,
|
||||
"listenerPath": null,
|
||||
"formCustom": "N",
|
||||
"formPath": null,
|
||||
"ext": "[]",
|
||||
"coordinate": "560,220",
|
||||
"version": "1",
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"skipCondition": null,
|
||||
"skipName": null,
|
||||
"nowNodeCode": "3e743f4f-51ca-41d4-8e94-21f5dd9b59c9",
|
||||
"nextNodeCode": "c80f273e-1f17-4bd8-9ad1-04a4a94ea862",
|
||||
"coordinate": "560,245;560,320;650,320"
|
||||
},
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"skipCondition": null,
|
||||
"skipName": null,
|
||||
"nowNodeCode": "3e743f4f-51ca-41d4-8e94-21f5dd9b59c9",
|
||||
"nextNodeCode": "1e3e8d3b-18ae-4d6c-a814-ce0d724adfa4",
|
||||
"coordinate": "560,195;560,120;650,120"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"nodeType": "1",
|
||||
"nodeCode": "c80f273e-1f17-4bd8-9ad1-04a4a94ea862",
|
||||
"nodeName": "会签",
|
||||
"permissionFlag": "role:1761300000000000001@@role:1761300000000000003",
|
||||
"nodeRatio": "100.000",
|
||||
"anyNodeSkip": null,
|
||||
"listenerType": "",
|
||||
"listenerPath": "",
|
||||
"formCustom": "N",
|
||||
"formPath": null,
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file,addSign,subSign\"}]",
|
||||
"coordinate": "700,320|700,320",
|
||||
"version": "1",
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"skipCondition": null,
|
||||
"skipName": null,
|
||||
"nowNodeCode": "c80f273e-1f17-4bd8-9ad1-04a4a94ea862",
|
||||
"nextNodeCode": "1a20169e-3d82-4926-a151-e2daad28de1b",
|
||||
"coordinate": "750,320;860,320;860,245"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"nodeType": "4",
|
||||
"nodeCode": "1a20169e-3d82-4926-a151-e2daad28de1b",
|
||||
"permissionFlag": null,
|
||||
"nodeRatio": "0.000",
|
||||
"anyNodeSkip": null,
|
||||
"listenerType": null,
|
||||
"listenerPath": null,
|
||||
"formCustom": "N",
|
||||
"formPath": null,
|
||||
"ext": "[]",
|
||||
"coordinate": "860,220",
|
||||
"version": "1",
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"skipCondition": null,
|
||||
"skipName": null,
|
||||
"nowNodeCode": "1a20169e-3d82-4926-a151-e2daad28de1b",
|
||||
"nextNodeCode": "7a8f0473-e409-442e-a843-5c2b813d00e9",
|
||||
"coordinate": "885,220;950,220"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"nodeType": "1",
|
||||
"nodeCode": "7a8f0473-e409-442e-a843-5c2b813d00e9",
|
||||
"nodeName": "CEO",
|
||||
"permissionFlag": "1761100000000000001",
|
||||
"nodeRatio": "0.000",
|
||||
"anyNodeSkip": null,
|
||||
"listenerType": "",
|
||||
"listenerPath": "",
|
||||
"formCustom": "N",
|
||||
"formPath": null,
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file,transfer,trust,copy\"}]",
|
||||
"coordinate": "1000,220|1000,220",
|
||||
"version": "1",
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"skipCondition": null,
|
||||
"skipName": null,
|
||||
"nowNodeCode": "7a8f0473-e409-442e-a843-5c2b813d00e9",
|
||||
"nextNodeCode": "03c4d2bc-58b5-4408-a2e4-65afb046f169",
|
||||
"coordinate": "1050,220;1120,220"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"nodeType": "2",
|
||||
"nodeCode": "03c4d2bc-58b5-4408-a2e4-65afb046f169",
|
||||
"nodeName": "结束",
|
||||
"permissionFlag": null,
|
||||
"nodeRatio": "0.000",
|
||||
"anyNodeSkip": null,
|
||||
"listenerType": null,
|
||||
"listenerPath": null,
|
||||
"formCustom": "N",
|
||||
"formPath": null,
|
||||
"ext": "[]",
|
||||
"coordinate": "1140,220|1140,220",
|
||||
"version": "1",
|
||||
"skipList": []
|
||||
},
|
||||
{
|
||||
"nodeType": "1",
|
||||
"nodeCode": "1e3e8d3b-18ae-4d6c-a814-ce0d724adfa4",
|
||||
"nodeName": "百分之60票签",
|
||||
"permissionFlag": "${userList}",
|
||||
"nodeRatio": "60.000",
|
||||
"anyNodeSkip": null,
|
||||
"listenerType": "",
|
||||
"listenerPath": "",
|
||||
"formCustom": "N",
|
||||
"formPath": null,
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file,addSign,subSign\"}]",
|
||||
"coordinate": "700,120|700,120",
|
||||
"version": "1",
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"skipCondition": null,
|
||||
"skipName": null,
|
||||
"nowNodeCode": "1e3e8d3b-18ae-4d6c-a814-ce0d724adfa4",
|
||||
"nextNodeCode": "1a20169e-3d82-4926-a151-e2daad28de1b",
|
||||
"nextNodeType": "4",
|
||||
"coordinate": "750,120;860,120;860,195"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"flowCode": "leave5",
|
||||
"flowName": "请假申请-并行会签网关",
|
||||
"modelValue": "CLASSICS",
|
||||
"category": "1762300000000000103",
|
||||
"version": "1",
|
||||
"formCustom": "N",
|
||||
"formPath": "/workflow/leaveEdit/index",
|
||||
"listenerType": null,
|
||||
"listenerPath": null
|
||||
}
|
||||
@ -1,368 +0,0 @@
|
||||
{
|
||||
"nodeList": [
|
||||
{
|
||||
"nodeType": "0",
|
||||
"nodeCode": "122b89a5-7c6f-40a3-aa09-7a263f902054",
|
||||
"nodeName": "开始",
|
||||
"permissionFlag": null,
|
||||
"nodeRatio": "0.000",
|
||||
"anyNodeSkip": null,
|
||||
"listenerType": null,
|
||||
"listenerPath": null,
|
||||
"formCustom": "N",
|
||||
"formPath": null,
|
||||
"ext": "[]",
|
||||
"coordinate": "240,300|240,300",
|
||||
"version": "1",
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"skipCondition": null,
|
||||
"skipName": null,
|
||||
"nowNodeCode": "122b89a5-7c6f-40a3-aa09-7a263f902054",
|
||||
"nextNodeCode": "c25a0e86-fdd1-4f03-8e22-14db70389dbd",
|
||||
"coordinate": "260,300;350,300"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"nodeType": "1",
|
||||
"nodeCode": "c25a0e86-fdd1-4f03-8e22-14db70389dbd",
|
||||
"nodeName": "申请人",
|
||||
"permissionFlag": "${initiator}",
|
||||
"nodeRatio": "0.000",
|
||||
"anyNodeSkip": null,
|
||||
"listenerType": "",
|
||||
"listenerPath": "",
|
||||
"formCustom": "N",
|
||||
"formPath": null,
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file\"}]",
|
||||
"coordinate": "400,300|400,300",
|
||||
"version": "1",
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"skipCondition": null,
|
||||
"skipName": null,
|
||||
"nowNodeCode": "c25a0e86-fdd1-4f03-8e22-14db70389dbd",
|
||||
"nextNodeCode": "07ecda1d-7a0a-47b5-8a91-6186c9473742",
|
||||
"coordinate": "450,300;510,300"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"nodeType": "1",
|
||||
"nodeCode": "2bfa3919-78cf-4bc1-b59b-df463a4546f9",
|
||||
"nodeName": "副经理",
|
||||
"permissionFlag": "role:1761300000000000001@@role:1761300000000000003@@role:1761300000000000004",
|
||||
"nodeRatio": "0.000",
|
||||
"anyNodeSkip": null,
|
||||
"listenerType": "",
|
||||
"listenerPath": "",
|
||||
"formCustom": "N",
|
||||
"formPath": null,
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination\"}]",
|
||||
"coordinate": "860,200|860,200",
|
||||
"version": "1",
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"skipCondition": null,
|
||||
"skipName": null,
|
||||
"nowNodeCode": "2bfa3919-78cf-4bc1-b59b-df463a4546f9",
|
||||
"nextNodeCode": "394e1cc8-b8b2-4189-9f81-44448e88ac32",
|
||||
"coordinate": "910,200;1000,200;1000,275"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"nodeType": "1",
|
||||
"nodeCode": "ec17f60e-94e0-4d96-a3ce-3417e9d32d60",
|
||||
"nodeName": "组长",
|
||||
"permissionFlag": "1761100000000000001",
|
||||
"nodeRatio": "0.000",
|
||||
"anyNodeSkip": null,
|
||||
"listenerType": "",
|
||||
"listenerPath": "",
|
||||
"formCustom": "N",
|
||||
"formPath": null,
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination\"}]",
|
||||
"coordinate": "860,400|860,400",
|
||||
"version": "1",
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"skipCondition": null,
|
||||
"skipName": null,
|
||||
"nowNodeCode": "ec17f60e-94e0-4d96-a3ce-3417e9d32d60",
|
||||
"nextNodeCode": "394e1cc8-b8b2-4189-9f81-44448e88ac32",
|
||||
"coordinate": "910,400;1000,400;1000,325"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"nodeType": "1",
|
||||
"nodeCode": "07ecda1d-7a0a-47b5-8a91-6186c9473742",
|
||||
"nodeName": "副组长",
|
||||
"permissionFlag": "1761100000000000001",
|
||||
"nodeRatio": "0.000",
|
||||
"anyNodeSkip": null,
|
||||
"listenerType": "",
|
||||
"listenerPath": "",
|
||||
"formCustom": "N",
|
||||
"formPath": null,
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,transfer,copy,pop\"}]",
|
||||
"coordinate": "560,300|560,300",
|
||||
"version": "1",
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"skipCondition": null,
|
||||
"skipName": null,
|
||||
"nowNodeCode": "07ecda1d-7a0a-47b5-8a91-6186c9473742",
|
||||
"nextNodeCode": "48117e2c-6328-406b-b102-c4a9d115bb13",
|
||||
"coordinate": "610,300;675,300"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"nodeType": "3",
|
||||
"nodeCode": "48117e2c-6328-406b-b102-c4a9d115bb13",
|
||||
"permissionFlag": null,
|
||||
"nodeRatio": "0.000",
|
||||
"anyNodeSkip": null,
|
||||
"listenerType": null,
|
||||
"listenerPath": null,
|
||||
"formCustom": "N",
|
||||
"formPath": null,
|
||||
"ext": "[]",
|
||||
"coordinate": "700,300",
|
||||
"version": "1",
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"skipCondition": "default@@${leaveDays > 2}",
|
||||
"skipName": "大于两天",
|
||||
"nowNodeCode": "48117e2c-6328-406b-b102-c4a9d115bb13",
|
||||
"nextNodeCode": "2bfa3919-78cf-4bc1-b59b-df463a4546f9",
|
||||
"nextNodeType": "1",
|
||||
"coordinate": "700,275;700,200;810,200|700,237"
|
||||
},
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"skipCondition": "spel@@#{@testLeaveServiceImpl.eval(#leaveDays)}",
|
||||
"skipName": null,
|
||||
"nowNodeCode": "48117e2c-6328-406b-b102-c4a9d115bb13",
|
||||
"nextNodeCode": "ec17f60e-94e0-4d96-a3ce-3417e9d32d60",
|
||||
"nextNodeType": "1",
|
||||
"coordinate": "700,325;700,400;810,400"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"nodeType": "3",
|
||||
"nodeCode": "394e1cc8-b8b2-4189-9f81-44448e88ac32",
|
||||
"permissionFlag": null,
|
||||
"nodeRatio": "0.000",
|
||||
"anyNodeSkip": null,
|
||||
"listenerType": null,
|
||||
"listenerPath": null,
|
||||
"formCustom": "N",
|
||||
"formPath": null,
|
||||
"ext": "[]",
|
||||
"coordinate": "1000,300",
|
||||
"version": "1",
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"skipCondition": null,
|
||||
"skipName": null,
|
||||
"nowNodeCode": "394e1cc8-b8b2-4189-9f81-44448e88ac32",
|
||||
"nextNodeCode": "9c93a195-cff2-4e17-ab0a-a4f264191496",
|
||||
"coordinate": "1025,300;1130,300"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"nodeType": "1",
|
||||
"nodeCode": "9c93a195-cff2-4e17-ab0a-a4f264191496",
|
||||
"nodeName": "经理会签",
|
||||
"permissionFlag": "1761100000000000001@@1761100000000000003",
|
||||
"nodeRatio": "100.000",
|
||||
"anyNodeSkip": null,
|
||||
"listenerType": "",
|
||||
"listenerPath": "",
|
||||
"formCustom": "N",
|
||||
"formPath": null,
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,pop,addSign,subSign\"}]",
|
||||
"coordinate": "1180,300|1180,300",
|
||||
"version": "1",
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"skipCondition": null,
|
||||
"skipName": null,
|
||||
"nowNodeCode": "9c93a195-cff2-4e17-ab0a-a4f264191496",
|
||||
"nextNodeCode": "a1a42056-afd1-4e90-88bc-36cbf5a66992",
|
||||
"coordinate": "1230,300;1315,300"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"nodeType": "4",
|
||||
"nodeCode": "a1a42056-afd1-4e90-88bc-36cbf5a66992",
|
||||
"permissionFlag": null,
|
||||
"nodeRatio": "0.000",
|
||||
"anyNodeSkip": null,
|
||||
"listenerType": null,
|
||||
"listenerPath": null,
|
||||
"formCustom": "N",
|
||||
"formPath": null,
|
||||
"ext": "[]",
|
||||
"coordinate": "1340,300",
|
||||
"version": "1",
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"skipCondition": null,
|
||||
"skipName": null,
|
||||
"nowNodeCode": "a1a42056-afd1-4e90-88bc-36cbf5a66992",
|
||||
"nextNodeCode": "fcfdd9f6-f526-4c1a-b71d-88afa31aebc5",
|
||||
"coordinate": "1340,325;1340,400;1430,400"
|
||||
},
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"skipCondition": null,
|
||||
"skipName": null,
|
||||
"nowNodeCode": "a1a42056-afd1-4e90-88bc-36cbf5a66992",
|
||||
"nextNodeCode": "350dfa0c-a77c-4efa-8527-10efa02d8be4",
|
||||
"coordinate": "1340,275;1340,200;1430,200"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"nodeType": "1",
|
||||
"nodeCode": "350dfa0c-a77c-4efa-8527-10efa02d8be4",
|
||||
"nodeName": "总经理",
|
||||
"permissionFlag": "1761100000000000001@@1761100000000000003",
|
||||
"nodeRatio": "0.000",
|
||||
"anyNodeSkip": null,
|
||||
"listenerType": "",
|
||||
"listenerPath": "",
|
||||
"formCustom": "N",
|
||||
"formPath": null,
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination\"}]",
|
||||
"coordinate": "1480,200|1480,200",
|
||||
"version": "1",
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"skipCondition": null,
|
||||
"skipName": null,
|
||||
"nowNodeCode": "350dfa0c-a77c-4efa-8527-10efa02d8be4",
|
||||
"nextNodeCode": "c36a46ef-04f9-463f-bad7-4b395c818519",
|
||||
"coordinate": "1530,200;1640,200;1640,275"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"nodeType": "1",
|
||||
"nodeCode": "fcfdd9f6-f526-4c1a-b71d-88afa31aebc5",
|
||||
"nodeName": "副总经理",
|
||||
"permissionFlag": "1761100000000000001@@1761100000000000003",
|
||||
"nodeRatio": "0.000",
|
||||
"anyNodeSkip": null,
|
||||
"listenerType": "",
|
||||
"listenerPath": "",
|
||||
"formCustom": "N",
|
||||
"formPath": null,
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination\"}]",
|
||||
"coordinate": "1480,400|1480,400",
|
||||
"version": "1",
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"skipCondition": null,
|
||||
"skipName": null,
|
||||
"nowNodeCode": "fcfdd9f6-f526-4c1a-b71d-88afa31aebc5",
|
||||
"nextNodeCode": "c36a46ef-04f9-463f-bad7-4b395c818519",
|
||||
"coordinate": "1530,400;1640,400;1640,325"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"nodeType": "4",
|
||||
"nodeCode": "c36a46ef-04f9-463f-bad7-4b395c818519",
|
||||
"permissionFlag": null,
|
||||
"nodeRatio": "0.000",
|
||||
"anyNodeSkip": null,
|
||||
"listenerType": null,
|
||||
"listenerPath": null,
|
||||
"formCustom": "N",
|
||||
"formPath": null,
|
||||
"ext": "[]",
|
||||
"coordinate": "1640,300",
|
||||
"version": "1",
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"skipCondition": null,
|
||||
"skipName": null,
|
||||
"nowNodeCode": "c36a46ef-04f9-463f-bad7-4b395c818519",
|
||||
"nextNodeCode": "3fcea762-b53a-4ae1-8365-7bec90444828",
|
||||
"coordinate": "1665,300;1770,300"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"nodeType": "1",
|
||||
"nodeCode": "3fcea762-b53a-4ae1-8365-7bec90444828",
|
||||
"nodeName": "董事",
|
||||
"permissionFlag": "1761100000000000001",
|
||||
"nodeRatio": "0.000",
|
||||
"anyNodeSkip": null,
|
||||
"listenerType": "",
|
||||
"listenerPath": "",
|
||||
"formCustom": "N",
|
||||
"formPath": null,
|
||||
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination\"}]",
|
||||
"coordinate": "1820,300|1820,300",
|
||||
"version": "1",
|
||||
"skipList": [
|
||||
{
|
||||
"skipType": "PASS",
|
||||
"skipCondition": null,
|
||||
"skipName": null,
|
||||
"nowNodeCode": "3fcea762-b53a-4ae1-8365-7bec90444828",
|
||||
"nextNodeCode": "9cfbfd3e-6c04-41d6-9fc2-6787a7d2cd31",
|
||||
"coordinate": "1870,300;1960,300"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"nodeType": "2",
|
||||
"nodeCode": "9cfbfd3e-6c04-41d6-9fc2-6787a7d2cd31",
|
||||
"nodeName": "结束",
|
||||
"permissionFlag": null,
|
||||
"nodeRatio": "0.000",
|
||||
"anyNodeSkip": null,
|
||||
"listenerType": null,
|
||||
"listenerPath": null,
|
||||
"formCustom": "N",
|
||||
"formPath": null,
|
||||
"ext": "[]",
|
||||
"coordinate": "1980,300|1980,300",
|
||||
"version": "1",
|
||||
"skipList": []
|
||||
}
|
||||
],
|
||||
"flowCode": "leave6",
|
||||
"flowName": "请假申请-排他并行会签",
|
||||
"modelValue": "CLASSICS",
|
||||
"category": "1762300000000000103",
|
||||
"version": "1",
|
||||
"formCustom": "N",
|
||||
"formPath": "/workflow/leaveEdit/index",
|
||||
"listenerType": null,
|
||||
"listenerPath": null
|
||||
}
|
||||
@ -12,10 +12,11 @@ create table FLOW_DEFINITION
|
||||
IS_PUBLISH NUMBER(1) default 0 not null,
|
||||
FORM_CUSTOM VARCHAR2(1) default 'N',
|
||||
FORM_PATH VARCHAR2(100),
|
||||
ACTIVITY_STATUS NUMBER(1) default 1,
|
||||
ACTIVITY_STATUS NUMBER(1) default 1 not null,
|
||||
LISTENER_TYPE VARCHAR2(100),
|
||||
LISTENER_PATH VARCHAR2(500),
|
||||
LISTENER_PATH VARCHAR2(400),
|
||||
EXT VARCHAR2(500),
|
||||
DEF_CONFIG CLOB,
|
||||
CREATE_TIME DATE,
|
||||
CREATE_BY VARCHAR2(64) default '',
|
||||
UPDATE_TIME DATE,
|
||||
@ -41,6 +42,7 @@ comment on column FLOW_DEFINITION.ACTIVITY_STATUS is '流程激活状态(0挂
|
||||
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.DEF_CONFIG is '流程定义配置(自动审批等引擎配置与自定义扩展属性json)';
|
||||
comment on column FLOW_DEFINITION.CREATE_TIME is '创建时间';
|
||||
comment on column FLOW_DEFINITION.CREATE_BY is '创建人';
|
||||
comment on column FLOW_DEFINITION.UPDATE_TIME is '更新时间';
|
||||
@ -60,15 +62,19 @@ create table FLOW_NODE
|
||||
COORDINATE VARCHAR2(100),
|
||||
ANY_NODE_SKIP VARCHAR2(100),
|
||||
LISTENER_TYPE VARCHAR2(100),
|
||||
LISTENER_PATH VARCHAR2(500),
|
||||
LISTENER_PATH VARCHAR2(400),
|
||||
FORM_CUSTOM VARCHAR2(1) default 'N',
|
||||
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,
|
||||
NODE_CONFIG CLOB,
|
||||
EVENT_TYPE VARCHAR2(40),
|
||||
EVENT_NAME VARCHAR2(100),
|
||||
ATTACHED_TO_NODE_CODE VARCHAR2(100),
|
||||
INTERRUPTING NUMBER(1),
|
||||
DEL_FLAG VARCHAR2(1) default '0',
|
||||
TENANT_ID VARCHAR2(40)
|
||||
);
|
||||
@ -89,12 +95,16 @@ comment on column FLOW_NODE.LISTENER_TYPE is '监听器类型';
|
||||
comment on column FLOW_NODE.LISTENER_PATH is '监听器路径';
|
||||
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.NODE_CONFIG is '节点配置(服务任务、事件等引擎节点配置json)';
|
||||
comment on column FLOW_NODE.EVENT_TYPE is '事件类型(MESSAGE_START TIMER_START TIMER_CATCH MESSAGE_CATCH MESSAGE_THROW TIMER_BOUNDARY MESSAGE_BOUNDARY ERROR_CATCH ERROR_BOUNDARY TERMINATE_END MESSAGE_END)';
|
||||
comment on column FLOW_NODE.EVENT_NAME is '事件名称(消息事件使用)';
|
||||
comment on column FLOW_NODE.ATTACHED_TO_NODE_CODE is '边界事件附着的任务节点编码';
|
||||
comment on column FLOW_NODE.INTERRUPTING is '边界事件是否中断型';
|
||||
comment on column FLOW_NODE.DEL_FLAG is '删除标志';
|
||||
comment on column FLOW_NODE.TENANT_ID is '租户id';
|
||||
comment on column FLOW_NODE.PERMISSION_FLAG is '权限标识(权限类型:权限标识,可以多个,用@@隔开)';
|
||||
@ -145,12 +155,12 @@ create table FLOW_INSTANCE
|
||||
ID NUMBER not null,
|
||||
DEFINITION_ID NUMBER not null,
|
||||
BUSINESS_ID VARCHAR2(40) not null,
|
||||
NODE_TYPE NUMBER(1),
|
||||
NODE_CODE VARCHAR2(100),
|
||||
NODE_TYPE NUMBER(1) not null,
|
||||
NODE_CODE VARCHAR2(100) not null,
|
||||
NODE_NAME VARCHAR2(100),
|
||||
VARIABLE CLOB,
|
||||
FLOW_STATUS VARCHAR2(20),
|
||||
ACTIVITY_STATUS NUMBER(1) default 1,
|
||||
FLOW_STATUS VARCHAR2(20) not null,
|
||||
ACTIVITY_STATUS NUMBER(1) default 1 not null,
|
||||
DEF_JSON CLOB,
|
||||
CREATE_TIME DATE,
|
||||
CREATE_BY VARCHAR2(64) default '',
|
||||
@ -172,7 +182,7 @@ comment on column FLOW_INSTANCE.NODE_TYPE is '开始节点类型 (0开始节点
|
||||
comment on column FLOW_INSTANCE.NODE_CODE is '开始节点编码';
|
||||
comment on column FLOW_INSTANCE.NODE_NAME is '开始节点名称';
|
||||
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.FLOW_STATUS is '实例状态(draft待提交 waiting审批中 termination终止 invalid作废 cancel撤销 finish已完成 back已退回 restart重启)';
|
||||
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_TIME is '创建时间';
|
||||
@ -188,10 +198,10 @@ create table FLOW_TASK
|
||||
ID NUMBER(20) not null,
|
||||
DEFINITION_ID NUMBER(20) not null,
|
||||
INSTANCE_ID NUMBER(20) not null,
|
||||
NODE_CODE VARCHAR2(100),
|
||||
NODE_CODE VARCHAR2(100) not null,
|
||||
NODE_NAME VARCHAR2(100),
|
||||
NODE_TYPE NUMBER(1),
|
||||
FLOW_STATUS VARCHAR2(20),
|
||||
NODE_TYPE NUMBER(1) not null,
|
||||
FLOW_STATUS VARCHAR2(20) not null,
|
||||
FORM_CUSTOM VARCHAR2(1) default 'N',
|
||||
FORM_PATH VARCHAR2(100),
|
||||
CREATE_TIME DATE,
|
||||
@ -212,7 +222,7 @@ comment on column FLOW_TASK.INSTANCE_ID is '对应flow_instance表的id';
|
||||
comment on column FLOW_TASK.NODE_CODE is '节点编码';
|
||||
comment on column FLOW_TASK.NODE_NAME is '节点名称';
|
||||
comment on column FLOW_TASK.NODE_TYPE is '节点类型 (0开始节点 1中间节点 2结束节点 3互斥网关 4并行网关)';
|
||||
comment on column FLOW_TASK.FLOW_STATUS is '流程状态(0待提交 1审批中 2审批通过 4终止 5作废 6撤销 8已完成 9已退回 10失效 11拿回)';
|
||||
comment on column FLOW_TASK.FLOW_STATUS is '任务状态(pending待审批 pass通过 auto_pass自动审批 back退回 invalid失效 take_back拿回 copy抄送;任务结果,勿套用实例状态编码)';
|
||||
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 '创建时间';
|
||||
@ -234,15 +244,16 @@ create table FLOW_HIS_TASK
|
||||
TARGET_NODE_CODE VARCHAR2(200),
|
||||
TARGET_NODE_NAME VARCHAR2(200),
|
||||
APPROVER VARCHAR2(40),
|
||||
COOPERATE_TYPE NUMBER(1) default 0,
|
||||
COOPERATE_TYPE VARCHAR2(20) default 'none' not null,
|
||||
COLLABORATOR VARCHAR2(500),
|
||||
SKIP_TYPE VARCHAR2(10),
|
||||
FLOW_STATUS VARCHAR2(20),
|
||||
SKIP_TYPE VARCHAR2(10) not null,
|
||||
FLOW_STATUS VARCHAR2(20) not null,
|
||||
FORM_CUSTOM VARCHAR2(1) default 'N',
|
||||
FORM_PATH VARCHAR2(100),
|
||||
MESSAGE VARCHAR2(500),
|
||||
VARIABLE CLOB,
|
||||
EXT CLOB,
|
||||
NODE_CONFIG CLOB,
|
||||
CREATE_TIME DATE,
|
||||
UPDATE_TIME DATE,
|
||||
DEL_FLAG VARCHAR2(1) default '0',
|
||||
@ -264,18 +275,19 @@ comment on column FLOW_HIS_TASK.NODE_TYPE is '开始节点类型 (0开始节点
|
||||
comment on column FLOW_HIS_TASK.TARGET_NODE_CODE is '目标节点编码';
|
||||
comment on column FLOW_HIS_TASK.TARGET_NODE_NAME is '目标节点名称';
|
||||
comment on column FLOW_HIS_TASK.SKIP_TYPE is '流转类型(PASS通过 REJECT退回 NONE无动作)';
|
||||
comment on column FLOW_HIS_TASK.FLOW_STATUS is '流程状态(0待提交 1审批中 2审批通过 4终止 5作废 6撤销 8已完成 9已退回 10失效 11拿回)';
|
||||
comment on column FLOW_HIS_TASK.FLOW_STATUS is '任务状态(pending待审批 pass通过 auto_pass自动审批 back退回 invalid失效 take_back拿回 copy抄送;任务结果,勿套用实例状态编码,唯一例外是撤回归档写 cancel)';
|
||||
comment on column FLOW_HIS_TASK.FORM_CUSTOM is '审批表单是否自定义 (Y是 N否)';
|
||||
comment on column FLOW_HIS_TASK.FORM_PATH is '审批表单路径';
|
||||
comment on column FLOW_HIS_TASK.MESSAGE is '审批意见';
|
||||
comment on column FLOW_HIS_TASK.VARIABLE is '任务变量';
|
||||
comment on column FLOW_HIS_TASK.EXT is '扩展字段,预留给业务系统使用';
|
||||
comment on column FLOW_HIS_TASK.NODE_CONFIG is '节点配置(服务任务等引擎配置与自定义扩展属性json)';
|
||||
comment on column FLOW_HIS_TASK.CREATE_TIME is '任务开始时间';
|
||||
comment on column FLOW_HIS_TASK.UPDATE_TIME is '审批完成时间';
|
||||
comment on column FLOW_HIS_TASK.DEL_FLAG is '删除标志';
|
||||
comment on column FLOW_HIS_TASK.TENANT_ID is '租户id';
|
||||
comment on column FLOW_HIS_TASK.APPROVER is '审批者';
|
||||
comment on column FLOW_HIS_TASK.COOPERATE_TYPE is '协作方式(1审批 2转办 3委派 4会签 5票签 6加签 7减签)';
|
||||
comment on column FLOW_HIS_TASK.COOPERATE_TYPE is '协作方式(none无 transfer转办 delegate委派 add_signer加签 remove_signer减签;行为维度,抄送/会签/票签不落此列,结果见 flow_status)';
|
||||
comment on column FLOW_HIS_TASK.COLLABORATOR is '协作人';
|
||||
|
||||
create table FLOW_USER
|
||||
@ -285,7 +297,7 @@ create table FLOW_USER
|
||||
PROCESSED_BY VARCHAR2(80),
|
||||
ASSOCIATED NUMBER(20) not null,
|
||||
CREATE_TIME DATE,
|
||||
CREATE_BY VARCHAR2(64) default '',
|
||||
CREATE_BY VARCHAR2(80),
|
||||
UPDATE_TIME DATE,
|
||||
UPDATE_BY VARCHAR2(64) default '',
|
||||
DEL_FLAG VARCHAR2(1) default '0',
|
||||
@ -297,9 +309,9 @@ alter table FLOW_USER
|
||||
|
||||
comment on table FLOW_USER is '待办任务表';
|
||||
comment on column FLOW_USER.ID is '主键id';
|
||||
comment on column FLOW_USER.TYPE is '人员类型(1待办任务的审批人权限 2待办任务的转办人权限 3待办任务的委托人权限)';
|
||||
comment on column FLOW_USER.TYPE is '人员类型(1待办任务的审批人权限 2待办任务的转办人权限 3待办任务的委托人权限 4待办任务的抄送人)';
|
||||
comment on column FLOW_USER.PROCESSED_BY is '权限人)';
|
||||
comment on column FLOW_USER.ASSOCIATED is '任务表id';
|
||||
comment on column FLOW_USER.ASSOCIATED is '关联id(待办任务id;抄送人记录为 flow_his_task.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 '更新时间';
|
||||
@ -310,6 +322,79 @@ comment on column FLOW_USER.TENANT_ID is '租户id';
|
||||
create index USER_PROCESSED_TYPE on FLOW_USER (PROCESSED_BY, TYPE);
|
||||
create index USER_ASSOCIATED_IDX on FLOW_USER (ASSOCIATED);
|
||||
|
||||
-- ----------------------------
|
||||
-- 事件等待表
|
||||
-- ----------------------------
|
||||
-- 定时 / 消息等需要“等待”的事件统一落在此表,状态独立于流程状态。
|
||||
create table FLOW_EVENT_WAIT
|
||||
(
|
||||
ID NUMBER(20) not null,
|
||||
TENANT_ID VARCHAR2(40),
|
||||
DEL_FLAG VARCHAR2(1) default '0',
|
||||
DEFINITION_ID NUMBER(20),
|
||||
INSTANCE_ID NUMBER(20),
|
||||
NODE_CODE VARCHAR2(100),
|
||||
EVENT_TYPE VARCHAR2(40) not null,
|
||||
EVENT_NAME VARCHAR2(100),
|
||||
ATTACHED_TASK_ID NUMBER(20),
|
||||
TRIGGER_TYPE VARCHAR2(40),
|
||||
TRIGGER_INTERVAL VARCHAR2(100),
|
||||
NEXT_TRIGGER_AT DATE,
|
||||
TIMEZONE VARCHAR2(40),
|
||||
REPEAT_COUNT NUMBER(10),
|
||||
MAX_REPEAT_COUNT NUMBER(10),
|
||||
STATUS VARCHAR2(20) not null,
|
||||
RETRY_COUNT NUMBER(10),
|
||||
MAX_RETRY_COUNT NUMBER(10),
|
||||
RETRY_AT DATE,
|
||||
LOCK_OWNER VARCHAR2(64),
|
||||
LOCK_UNTIL DATE,
|
||||
VERSION NUMBER(10),
|
||||
PAYLOAD CLOB,
|
||||
LAST_ERROR VARCHAR2(500),
|
||||
CREATE_TIME DATE,
|
||||
UPDATE_TIME DATE
|
||||
);
|
||||
|
||||
alter table FLOW_EVENT_WAIT
|
||||
add constraint PK_FLOW_EVENT_WAIT primary key (ID);
|
||||
|
||||
comment on table FLOW_EVENT_WAIT is '事件等待表';
|
||||
comment on column FLOW_EVENT_WAIT.ID is '主键id';
|
||||
comment on column FLOW_EVENT_WAIT.TENANT_ID is '租户id';
|
||||
comment on column FLOW_EVENT_WAIT.DEL_FLAG is '删除标志';
|
||||
comment on column FLOW_EVENT_WAIT.DEFINITION_ID is '流程定义id(定时启动事件必须有)';
|
||||
comment on column FLOW_EVENT_WAIT.INSTANCE_ID is '流程实例id(实例等待事件必须有)';
|
||||
comment on column FLOW_EVENT_WAIT.NODE_CODE is '事件节点编码(定位沿用 definition_id + node_code)';
|
||||
comment on column FLOW_EVENT_WAIT.EVENT_TYPE is '事件类型(MESSAGE_START TIMER_START TIMER_CATCH MESSAGE_CATCH MESSAGE_THROW TIMER_BOUNDARY MESSAGE_BOUNDARY ERROR_CATCH ERROR_BOUNDARY TERMINATE_END MESSAGE_END)';
|
||||
comment on column FLOW_EVENT_WAIT.EVENT_NAME is '事件名称(消息事件使用)';
|
||||
comment on column FLOW_EVENT_WAIT.ATTACHED_TASK_ID is '边界事件关联的待办任务id';
|
||||
comment on column FLOW_EVENT_WAIT.TRIGGER_TYPE is '触发策略类型(AFTER FIXED POINT_IN_TIME)';
|
||||
comment on column FLOW_EVENT_WAIT.TRIGGER_INTERVAL is '触发策略原始配置';
|
||||
comment on column FLOW_EVENT_WAIT.NEXT_TRIGGER_AT is '下次触发时间';
|
||||
comment on column FLOW_EVENT_WAIT.TIMEZONE is '定时触发使用的时区';
|
||||
comment on column FLOW_EVENT_WAIT.REPEAT_COUNT is '已触发次数';
|
||||
comment on column FLOW_EVENT_WAIT.MAX_REPEAT_COUNT is '最大触发次数';
|
||||
comment on column FLOW_EVENT_WAIT.STATUS is '等待状态(WAITING RUNNING CANCELLED RETRY DEAD)';
|
||||
comment on column FLOW_EVENT_WAIT.RETRY_COUNT is '已重试次数';
|
||||
comment on column FLOW_EVENT_WAIT.MAX_RETRY_COUNT is '最大重试次数';
|
||||
comment on column FLOW_EVENT_WAIT.RETRY_AT is '下次重试时间';
|
||||
comment on column FLOW_EVENT_WAIT.LOCK_OWNER is '抢占持有者标识';
|
||||
comment on column FLOW_EVENT_WAIT.LOCK_UNTIL is '抢占租约到期时间';
|
||||
comment on column FLOW_EVENT_WAIT.VERSION is '乐观锁版本号';
|
||||
comment on column FLOW_EVENT_WAIT.PAYLOAD is '消息事件接收的业务载荷';
|
||||
comment on column FLOW_EVENT_WAIT.LAST_ERROR is '最近一次失败原因摘要';
|
||||
comment on column FLOW_EVENT_WAIT.CREATE_TIME is '创建时间';
|
||||
comment on column FLOW_EVENT_WAIT.UPDATE_TIME is '更新时间';
|
||||
|
||||
create index EVENT_WAIT_STATUS_NEXT on FLOW_EVENT_WAIT (STATUS, NEXT_TRIGGER_AT, ID);
|
||||
create index EVENT_WAIT_STATUS_RETRY on FLOW_EVENT_WAIT (STATUS, RETRY_AT, ID);
|
||||
create index EVENT_WAIT_TENANT_NEXT on FLOW_EVENT_WAIT (TENANT_ID, STATUS, NEXT_TRIGGER_AT, ID);
|
||||
create index EVENT_WAIT_TENANT_RETRY on FLOW_EVENT_WAIT (TENANT_ID, STATUS, RETRY_AT, ID);
|
||||
create index EVENT_WAIT_INSTANCE_TASK on FLOW_EVENT_WAIT (INSTANCE_ID, ATTACHED_TASK_ID);
|
||||
create index EVENT_WAIT_NAME_INST_STATUS on FLOW_EVENT_WAIT (EVENT_NAME, INSTANCE_ID, STATUS);
|
||||
create index EVENT_WAIT_DEF_NODE_STATUS on FLOW_EVENT_WAIT (DEFINITION_ID, NODE_CODE, STATUS);
|
||||
|
||||
-- ----------------------------
|
||||
-- 流程分类表
|
||||
-- ----------------------------
|
||||
@ -533,17 +618,18 @@ INSERT INTO sys_dict_data VALUES (1761600000000000042, 4, '已完成', 'finish',
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000043, 5, '已作废', 'invalid', 'wf_business_status', '', 'danger', 'N', 1761000000000000103, 1761100000000000001, SYSDATE, NULL, NULL, '已作废');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000044, 6, '已退回', 'back', 'wf_business_status', '', 'danger', 'N', 1761000000000000103, 1761100000000000001, SYSDATE, NULL, NULL, '已退回');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000045, 7, '已终止', 'termination', 'wf_business_status', '', 'danger', 'N', 1761000000000000103, 1761100000000000001, SYSDATE, NULL, NULL, '已终止');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000063, 8, '重启', 'restart', 'wf_business_status', '', 'info', 'N', 1761000000000000103, 1761100000000000001, SYSDATE, NULL, NULL, '重启');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000046, 1, '自定义表单', 'static', 'wf_form_type', '', 'success', 'N', 1761000000000000103, 1761100000000000001, SYSDATE, NULL, NULL, '自定义表单');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000047, 2, '动态表单', 'dynamic', 'wf_form_type', '', 'primary', 'N', 1761000000000000103, 1761100000000000001, SYSDATE, NULL, NULL, '动态表单');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000048, 1, '撤销', 'cancel', 'wf_task_status', '', 'danger', 'N', 1761000000000000103, 1761100000000000001, SYSDATE, NULL, NULL, '撤销');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000060, 1, '待审批', 'pending', 'wf_task_status', '', 'primary', 'N', 1761000000000000103, 1761100000000000001, SYSDATE, NULL, NULL, '待审批');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000049, 2, '通过', 'pass', 'wf_task_status', '', 'success', 'N', 1761000000000000103, 1761100000000000001, SYSDATE, NULL, NULL, '通过');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000050, 3, '待审核', 'waiting', 'wf_task_status', '', 'primary', 'N', 1761000000000000103, 1761100000000000001, SYSDATE, NULL, NULL, '待审核');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000051, 4, '作废', 'invalid', 'wf_task_status', '', 'danger', 'N', 1761000000000000103, 1761100000000000001, SYSDATE, NULL, NULL, '作废');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000061, 3, '自动审批', 'auto_pass', 'wf_task_status', '', 'success', 'N', 1761000000000000103, 1761100000000000001, SYSDATE, NULL, NULL, '自动审批');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000056, 4, '抄送', 'copy', 'wf_task_status', '', 'primary', 'N', 1761000000000000103, 1761100000000000001, SYSDATE, NULL, NULL, '抄送');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000052, 5, '退回', 'back', 'wf_task_status', '', 'danger', 'N', 1761000000000000103, 1761100000000000001, SYSDATE, NULL, NULL, '退回');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000053, 6, '终止', 'termination', 'wf_task_status', '', 'danger', 'N', 1761000000000000103, 1761100000000000001, SYSDATE, NULL, NULL, '终止');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000054, 7, '转办', 'transfer', 'wf_task_status', '', 'primary', 'N', 1761000000000000103, 1761100000000000001, SYSDATE, NULL, NULL, '转办');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000055, 8, '委托', 'depute', 'wf_task_status', '', 'primary', 'N', 1761000000000000103, 1761100000000000001, SYSDATE, NULL, NULL, '委托');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000056, 9, '抄送', 'copy', 'wf_task_status', '', 'primary', 'N', 1761000000000000103, 1761100000000000001, SYSDATE, NULL, NULL, '抄送');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000057, 10, '加签', 'sign', 'wf_task_status', '', 'primary', 'N', 1761000000000000103, 1761100000000000001, SYSDATE, NULL, NULL, '加签');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000058, 11, '减签', 'sign_off', 'wf_task_status', '', 'danger', 'N', 1761000000000000103, 1761100000000000001, SYSDATE, NULL, NULL, '减签');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000059, 11, '超时', 'timeout', 'wf_task_status', '', 'danger', 'N', 1761000000000000103, 1761100000000000001, SYSDATE, NULL, NULL, '超时');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000062, 6, '拿回', 'take_back', 'wf_task_status', '', 'warning', 'N', 1761000000000000103, 1761100000000000001, SYSDATE, NULL, NULL, '拿回');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000051, 7, '失效', 'invalid', 'wf_task_status', '', 'danger', 'N', 1761000000000000103, 1761100000000000001, SYSDATE, NULL, NULL, '失效');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000048, 8, '撤销', 'cancel', 'wf_task_status', '', 'danger', 'N', 1761000000000000103, 1761100000000000001, SYSDATE, NULL, NULL, '撤销');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000064, 9, '转办', 'transfer', 'wf_task_status', '', 'warning', 'N', 1761000000000000103, 1761100000000000001, SYSDATE, NULL, NULL, '转办');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000065, 10, '委派', 'delegate', 'wf_task_status', '', 'warning', 'N', 1761000000000000103, 1761100000000000001, SYSDATE, NULL, NULL, '委派');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000066, 11, '加签', 'add_signer', 'wf_task_status', '', 'warning', 'N', 1761000000000000103, 1761100000000000001, SYSDATE, NULL, NULL, '加签');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000067, 12, '减签', 'remove_signer', 'wf_task_status', '', 'warning', 'N', 1761000000000000103, 1761100000000000001, SYSDATE, NULL, NULL, '减签');
|
||||
|
||||
@ -13,6 +13,7 @@ CREATE TABLE flow_definition
|
||||
listener_type varchar(100) NULL,
|
||||
listener_path varchar(400) NULL,
|
||||
ext varchar(500) NULL,
|
||||
def_config text NULL,
|
||||
create_time timestamp NULL,
|
||||
create_by varchar(64) NULL DEFAULT '':: character varying,
|
||||
update_time timestamp NULL,
|
||||
@ -36,6 +37,7 @@ COMMENT ON COLUMN flow_definition.activity_status IS '流程激活状态(0挂
|
||||
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.def_config IS '流程定义配置(自动审批等引擎配置与自定义扩展属性json)';
|
||||
COMMENT ON COLUMN flow_definition.create_time IS '创建时间';
|
||||
COMMENT ON COLUMN flow_definition.create_by IS '创建人';
|
||||
COMMENT ON COLUMN flow_definition.update_time IS '更新时间';
|
||||
@ -58,12 +60,16 @@ CREATE TABLE flow_node
|
||||
listener_path varchar(400) NULL,
|
||||
form_custom bpchar(1) NULL DEFAULT 'N':: character varying,
|
||||
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,
|
||||
node_config text NULL,
|
||||
event_type varchar(40) NULL,
|
||||
event_name varchar(100) NULL,
|
||||
attached_to_node_code varchar(100) NULL,
|
||||
interrupting int2 NULL,
|
||||
del_flag bpchar(1) NULL DEFAULT '0':: character varying,
|
||||
tenant_id varchar(40) NULL,
|
||||
CONSTRAINT flow_node_pkey PRIMARY KEY (id)
|
||||
@ -83,12 +89,16 @@ COMMENT ON COLUMN flow_node.listener_type IS '监听器类型';
|
||||
COMMENT ON COLUMN flow_node.listener_path IS '监听器路径';
|
||||
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.node_config IS '节点配置(服务任务、事件等引擎节点配置json)';
|
||||
COMMENT ON COLUMN flow_node.event_type IS '事件类型(MESSAGE_START TIMER_START TIMER_CATCH MESSAGE_CATCH MESSAGE_THROW TIMER_BOUNDARY MESSAGE_BOUNDARY ERROR_CATCH ERROR_BOUNDARY TERMINATE_END MESSAGE_END)';
|
||||
COMMENT ON COLUMN flow_node.event_name IS '事件名称(消息事件使用)';
|
||||
COMMENT ON COLUMN flow_node.attached_to_node_code IS '边界事件附着的任务节点编码';
|
||||
COMMENT ON COLUMN flow_node.interrupting IS '边界事件是否中断型';
|
||||
COMMENT ON COLUMN flow_node.del_flag IS '删除标志';
|
||||
COMMENT ON COLUMN flow_node.tenant_id IS '租户id';
|
||||
|
||||
@ -162,7 +172,7 @@ COMMENT ON COLUMN flow_instance.node_type IS '节点类型(0开始节点 1中
|
||||
COMMENT ON COLUMN flow_instance.node_code IS '流程节点编码';
|
||||
COMMENT ON COLUMN flow_instance.node_name IS '流程节点名称';
|
||||
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.flow_status IS '实例状态(draft待提交 waiting审批中 termination终止 invalid作废 cancel撤销 finish已完成 back已退回 restart重启)';
|
||||
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_time IS '创建时间';
|
||||
@ -200,7 +210,7 @@ COMMENT ON COLUMN flow_task.instance_id IS '对应flow_instance表的id';
|
||||
COMMENT ON COLUMN flow_task.node_code IS '节点编码';
|
||||
COMMENT ON COLUMN flow_task.node_name IS '节点名称';
|
||||
COMMENT ON COLUMN flow_task.node_type IS '节点类型(0开始节点 1中间节点 2结束节点 3互斥网关 4并行网关)';
|
||||
COMMENT ON COLUMN flow_task.flow_status IS '流程状态(0待提交 1审批中 2审批通过 4终止 5作废 6撤销 8已完成 9已退回 10失效 11拿回)';
|
||||
COMMENT ON COLUMN flow_task.flow_status IS '任务状态(pending待审批 pass通过 auto_pass自动审批 back退回 invalid失效 take_back拿回 copy抄送;任务结果,勿套用实例状态编码)';
|
||||
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 '创建时间';
|
||||
@ -222,15 +232,16 @@ CREATE TABLE flow_his_task
|
||||
target_node_code varchar(200) NULL,
|
||||
target_node_name varchar(200) NULL,
|
||||
approver varchar(40) NULL,
|
||||
cooperate_type int2 NOT NULL DEFAULT 0,
|
||||
cooperate_type varchar(20) NOT NULL DEFAULT 'none',
|
||||
collaborator varchar(500) NULL,
|
||||
skip_type varchar(10) NULL,
|
||||
skip_type varchar(10) NOT NULL,
|
||||
flow_status varchar(20) NOT NULL,
|
||||
form_custom bpchar(1) NULL DEFAULT 'N':: character varying,
|
||||
form_path varchar(100) NULL,
|
||||
ext text NULL,
|
||||
message varchar(500) NULL,
|
||||
variable text NULL,
|
||||
ext text NULL,
|
||||
node_config text NULL,
|
||||
create_time timestamp NULL,
|
||||
update_time timestamp NULL,
|
||||
del_flag bpchar(1) NULL DEFAULT '0':: character varying,
|
||||
@ -249,15 +260,16 @@ COMMENT ON COLUMN flow_his_task.node_type IS '开始节点类型(0开始节点
|
||||
COMMENT ON COLUMN flow_his_task.target_node_code IS '目标节点编码';
|
||||
COMMENT ON COLUMN flow_his_task.target_node_name IS '结束节点名称';
|
||||
COMMENT ON COLUMN flow_his_task.approver IS '审批者';
|
||||
COMMENT ON COLUMN flow_his_task.cooperate_type IS '协作方式(1审批 2转办 3委派 4会签 5票签 6加签 7减签)';
|
||||
COMMENT ON COLUMN flow_his_task.cooperate_type IS '协作方式(none无 transfer转办 delegate委派 add_signer加签 remove_signer减签;行为维度,抄送/会签/票签不落此列,结果见 flow_status)';
|
||||
COMMENT ON COLUMN flow_his_task.collaborator IS '协作人';
|
||||
COMMENT ON COLUMN flow_his_task.skip_type IS '流转类型(PASS通过 REJECT退回 NONE无动作)';
|
||||
COMMENT ON COLUMN flow_his_task.flow_status IS '流程状态(0待提交 1审批中 2审批通过 4终止 5作废 6撤销 8已完成 9已退回 10失效 11拿回)';
|
||||
COMMENT ON COLUMN flow_his_task.flow_status IS '任务状态(pending待审批 pass通过 auto_pass自动审批 back退回 invalid失效 take_back拿回 copy抄送;任务结果,勿套用实例状态编码,唯一例外是撤回归档写 cancel)';
|
||||
COMMENT ON COLUMN flow_his_task.form_custom IS '审批表单是否自定义(Y是 N否)';
|
||||
COMMENT ON COLUMN flow_his_task.form_path IS '审批表单路径';
|
||||
COMMENT ON COLUMN flow_his_task.message IS '审批意见';
|
||||
COMMENT ON COLUMN flow_his_task.variable IS '任务变量';
|
||||
COMMENT ON COLUMN flow_his_task.ext IS '扩展字段,预留给业务系统使用';
|
||||
COMMENT ON COLUMN flow_his_task.node_config IS '节点配置(服务任务等引擎配置与自定义扩展属性json)';
|
||||
COMMENT ON COLUMN flow_his_task.create_time IS '任务开始时间';
|
||||
COMMENT ON COLUMN flow_his_task.update_time IS '审批完成时间';
|
||||
COMMENT ON COLUMN flow_his_task.del_flag IS '删除标志';
|
||||
@ -270,7 +282,7 @@ CREATE TABLE flow_user
|
||||
processed_by varchar(80) NULL,
|
||||
associated int8 NOT NULL,
|
||||
create_time timestamp NULL,
|
||||
create_by varchar(64) NULL DEFAULT '':: character varying,
|
||||
create_by varchar(80) NULL:: character varying,
|
||||
update_time timestamp NULL,
|
||||
update_by varchar(64) NULL DEFAULT '':: character varying,
|
||||
del_flag bpchar(1) NULL DEFAULT '0':: character varying,
|
||||
@ -282,9 +294,9 @@ CREATE INDEX user_associated_idx ON FLOW_USER USING btree (associated);
|
||||
COMMENT ON TABLE flow_user IS '流程用户表';
|
||||
|
||||
COMMENT ON COLUMN flow_user.id IS '主键id';
|
||||
COMMENT ON COLUMN flow_user."type" IS '人员类型(1待办任务的审批人权限 2待办任务的转办人权限 3待办任务的委托人权限)';
|
||||
COMMENT ON COLUMN flow_user."type" IS '人员类型(1待办任务的审批人权限 2待办任务的转办人权限 3待办任务的委托人权限 4待办任务的抄送人)';
|
||||
COMMENT ON COLUMN flow_user.processed_by IS '权限人';
|
||||
COMMENT ON COLUMN flow_user.associated IS '任务表id';
|
||||
COMMENT ON COLUMN flow_user.associated IS '关联id(待办任务id;抄送人记录为 flow_his_task.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 '更新时间';
|
||||
@ -292,6 +304,75 @@ 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';
|
||||
|
||||
-- ----------------------------
|
||||
-- 事件等待表
|
||||
-- ----------------------------
|
||||
CREATE TABLE flow_event_wait
|
||||
(
|
||||
id int8 NOT NULL,
|
||||
tenant_id varchar(40) NULL,
|
||||
del_flag bpchar(1) NULL DEFAULT '0':: character varying,
|
||||
definition_id int8 NULL,
|
||||
instance_id int8 NULL,
|
||||
node_code varchar(100) NULL,
|
||||
event_type varchar(40) NOT NULL,
|
||||
event_name varchar(100) NULL,
|
||||
attached_task_id int8 NULL,
|
||||
trigger_type varchar(40) NULL,
|
||||
trigger_interval varchar(100) NULL,
|
||||
next_trigger_at timestamp NULL,
|
||||
timezone varchar(40) NULL,
|
||||
repeat_count int4 NULL,
|
||||
max_repeat_count int4 NULL,
|
||||
status varchar(20) NOT NULL,
|
||||
retry_count int4 NULL,
|
||||
max_retry_count int4 NULL,
|
||||
retry_at timestamp NULL,
|
||||
lock_owner varchar(64) NULL,
|
||||
lock_until timestamp NULL,
|
||||
version int4 NULL,
|
||||
payload text NULL,
|
||||
last_error varchar(500) NULL,
|
||||
create_time timestamp NULL,
|
||||
update_time timestamp NULL,
|
||||
CONSTRAINT flow_event_wait_pkey PRIMARY KEY (id)
|
||||
);
|
||||
CREATE INDEX event_wait_status_next ON flow_event_wait USING btree (status, next_trigger_at, id);
|
||||
CREATE INDEX event_wait_status_retry ON flow_event_wait USING btree (status, retry_at, id);
|
||||
CREATE INDEX event_wait_tenant_status_next ON flow_event_wait USING btree (tenant_id, status, next_trigger_at, id);
|
||||
CREATE INDEX event_wait_tenant_status_retry ON flow_event_wait USING btree (tenant_id, status, retry_at, id);
|
||||
CREATE INDEX event_wait_instance_task ON flow_event_wait USING btree (instance_id, attached_task_id);
|
||||
CREATE INDEX event_wait_name_instance_status ON flow_event_wait USING btree (event_name, instance_id, status);
|
||||
CREATE INDEX event_wait_def_node_status ON flow_event_wait USING btree (definition_id, node_code, status);
|
||||
COMMENT ON TABLE flow_event_wait IS '事件等待表';
|
||||
|
||||
COMMENT ON COLUMN flow_event_wait.id IS '主键id';
|
||||
COMMENT ON COLUMN flow_event_wait.tenant_id IS '租户id';
|
||||
COMMENT ON COLUMN flow_event_wait.del_flag IS '删除标志';
|
||||
COMMENT ON COLUMN flow_event_wait.definition_id IS '流程定义id(定时启动事件必须有)';
|
||||
COMMENT ON COLUMN flow_event_wait.instance_id IS '流程实例id(实例等待事件必须有)';
|
||||
COMMENT ON COLUMN flow_event_wait.node_code IS '事件节点编码(定位沿用 definition_id + node_code)';
|
||||
COMMENT ON COLUMN flow_event_wait.event_type IS '事件类型(MESSAGE_START TIMER_START TIMER_CATCH MESSAGE_CATCH MESSAGE_THROW TIMER_BOUNDARY MESSAGE_BOUNDARY ERROR_CATCH ERROR_BOUNDARY TERMINATE_END MESSAGE_END)';
|
||||
COMMENT ON COLUMN flow_event_wait.event_name IS '事件名称(消息事件使用)';
|
||||
COMMENT ON COLUMN flow_event_wait.attached_task_id IS '边界事件关联的待办任务id';
|
||||
COMMENT ON COLUMN flow_event_wait.trigger_type IS '触发策略类型(AFTER FIXED POINT_IN_TIME)';
|
||||
COMMENT ON COLUMN flow_event_wait.trigger_interval IS '触发策略原始配置';
|
||||
COMMENT ON COLUMN flow_event_wait.next_trigger_at IS '下次触发时间';
|
||||
COMMENT ON COLUMN flow_event_wait.timezone IS '定时触发使用的时区';
|
||||
COMMENT ON COLUMN flow_event_wait.repeat_count IS '已触发次数';
|
||||
COMMENT ON COLUMN flow_event_wait.max_repeat_count IS '最大触发次数';
|
||||
COMMENT ON COLUMN flow_event_wait.status IS '等待状态(WAITING RUNNING CANCELLED RETRY DEAD)';
|
||||
COMMENT ON COLUMN flow_event_wait.retry_count IS '已重试次数';
|
||||
COMMENT ON COLUMN flow_event_wait.max_retry_count IS '最大重试次数';
|
||||
COMMENT ON COLUMN flow_event_wait.retry_at IS '下次重试时间';
|
||||
COMMENT ON COLUMN flow_event_wait.lock_owner IS '抢占持有者标识';
|
||||
COMMENT ON COLUMN flow_event_wait.lock_until IS '抢占租约到期时间';
|
||||
COMMENT ON COLUMN flow_event_wait.version IS '乐观锁版本号';
|
||||
COMMENT ON COLUMN flow_event_wait.payload IS '消息事件接收的业务载荷';
|
||||
COMMENT ON COLUMN flow_event_wait.last_error IS '最近一次失败原因摘要';
|
||||
COMMENT ON COLUMN flow_event_wait.create_time IS '创建时间';
|
||||
COMMENT ON COLUMN flow_event_wait.update_time IS '更新时间';
|
||||
|
||||
-- ----------------------------
|
||||
-- 流程分类表
|
||||
-- ----------------------------
|
||||
@ -505,18 +586,19 @@ INSERT INTO sys_dict_data VALUES (1761600000000000042, 4, '已完成', 'finish',
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000043, 5, '已作废', 'invalid', 'wf_business_status', '', 'danger', 'N', 1761000000000000103, 1761100000000000001, now(), NULL, NULL, '已作废');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000044, 6, '已退回', 'back', 'wf_business_status', '', 'danger', 'N', 1761000000000000103, 1761100000000000001, now(), NULL, NULL, '已退回');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000045, 7, '已终止', 'termination', 'wf_business_status', '', 'danger', 'N', 1761000000000000103, 1761100000000000001, now(), NULL, NULL, '已终止');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000063, 8, '重启', 'restart', 'wf_business_status', '', 'info', 'N', 1761000000000000103, 1761100000000000001, now(), NULL, NULL, '重启');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000046, 1, '自定义表单', 'static', 'wf_form_type', '', 'success', 'N', 1761000000000000103, 1761100000000000001, now(), NULL, NULL, '自定义表单');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000047, 2, '动态表单', 'dynamic', 'wf_form_type', '', 'primary', 'N', 1761000000000000103, 1761100000000000001, now(), NULL, NULL, '动态表单');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000048, 1, '撤销', 'cancel', 'wf_task_status', '', 'danger', 'N', 1761000000000000103, 1761100000000000001, now(), NULL, NULL, '撤销');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000060, 1, '待审批', 'pending', 'wf_task_status', '', 'primary', 'N', 1761000000000000103, 1761100000000000001, now(), NULL, NULL, '待审批');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000049, 2, '通过', 'pass', 'wf_task_status', '', 'success', 'N', 1761000000000000103, 1761100000000000001, now(), NULL, NULL, '通过');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000050, 3, '待审核', 'waiting', 'wf_task_status', '', 'primary', 'N', 1761000000000000103, 1761100000000000001, now(), NULL, NULL, '待审核');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000051, 4, '作废', 'invalid', 'wf_task_status', '', 'danger', 'N', 1761000000000000103, 1761100000000000001, now(), NULL, NULL, '作废');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000061, 3, '自动审批', 'auto_pass', 'wf_task_status', '', 'success', 'N', 1761000000000000103, 1761100000000000001, now(), NULL, NULL, '自动审批');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000056, 4, '抄送', 'copy', 'wf_task_status', '', 'primary', 'N', 1761000000000000103, 1761100000000000001, now(), NULL, NULL, '抄送');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000052, 5, '退回', 'back', 'wf_task_status', '', 'danger', 'N', 1761000000000000103, 1761100000000000001, now(), NULL, NULL, '退回');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000053, 6, '终止', 'termination', 'wf_task_status', '', 'danger', 'N', 1761000000000000103, 1761100000000000001, now(), NULL, NULL, '终止');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000054, 7, '转办', 'transfer', 'wf_task_status', '', 'primary', 'N', 1761000000000000103, 1761100000000000001, now(), NULL, NULL, '转办');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000055, 8, '委托', 'depute', 'wf_task_status', '', 'primary', 'N', 1761000000000000103, 1761100000000000001, now(), NULL, NULL, '委托');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000056, 9, '抄送', 'copy', 'wf_task_status', '', 'primary', 'N', 1761000000000000103, 1761100000000000001, now(), NULL, NULL, '抄送');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000057, 10, '加签', 'sign', 'wf_task_status', '', 'primary', 'N', 1761000000000000103, 1761100000000000001, now(), NULL, NULL, '加签');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000058, 11, '减签', 'sign_off', 'wf_task_status', '', 'danger', 'N', 1761000000000000103, 1761100000000000001, now(), NULL, NULL, '减签');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000059, 11, '超时', 'timeout', 'wf_task_status', '', 'danger', 'N', 1761000000000000103, 1761100000000000001, now(), NULL, NULL, '超时');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000062, 6, '拿回', 'take_back', 'wf_task_status', '', 'warning', 'N', 1761000000000000103, 1761100000000000001, now(), NULL, NULL, '拿回');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000051, 7, '失效', 'invalid', 'wf_task_status', '', 'danger', 'N', 1761000000000000103, 1761100000000000001, now(), NULL, NULL, '失效');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000048, 8, '撤销', 'cancel', 'wf_task_status', '', 'danger', 'N', 1761000000000000103, 1761100000000000001, now(), NULL, NULL, '撤销');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000064, 9, '转办', 'transfer', 'wf_task_status', '', 'warning', 'N', 1761000000000000103, 1761100000000000001, now(), NULL, NULL, '转办');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000065, 10, '委派', 'delegate', 'wf_task_status', '', 'warning', 'N', 1761000000000000103, 1761100000000000001, now(), NULL, NULL, '委派');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000066, 11, '加签', 'add_signer', 'wf_task_status', '', 'warning', 'N', 1761000000000000103, 1761100000000000001, now(), NULL, NULL, '加签');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000067, 12, '减签', 'remove_signer', 'wf_task_status', '', 'warning', 'N', 1761000000000000103, 1761100000000000001, now(), NULL, NULL, '减签');
|
||||
|
||||
|
||||
@ -16,6 +16,7 @@ CREATE TABLE `flow_definition`
|
||||
`listener_type` varchar(100) DEFAULT NULL COMMENT '监听器类型',
|
||||
`listener_path` varchar(400) DEFAULT NULL COMMENT '监听器路径',
|
||||
`ext` varchar(500) DEFAULT NULL COMMENT '业务详情 存业务表对象json字符串',
|
||||
`def_config` text COMMENT '流程定义配置(自动审批等引擎配置与自定义扩展属性json)',
|
||||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`create_by` varchar(64) DEFAULT '' COMMENT '创建人',
|
||||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||||
@ -40,12 +41,16 @@ CREATE TABLE `flow_node`
|
||||
`listener_path` varchar(400) DEFAULT NULL COMMENT '监听器路径',
|
||||
`form_custom` char(1) DEFAULT 'N' COMMENT '审批表单是否自定义(Y是 N否)',
|
||||
`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 '节点扩展属性',
|
||||
`node_config` text COMMENT '节点配置(服务任务、事件等引擎节点配置json)',
|
||||
`event_type` varchar(40) DEFAULT NULL COMMENT '事件类型(MESSAGE_START TIMER_START TIMER_CATCH MESSAGE_CATCH MESSAGE_THROW TIMER_BOUNDARY MESSAGE_BOUNDARY ERROR_CATCH ERROR_BOUNDARY TERMINATE_END MESSAGE_END)',
|
||||
`event_name` varchar(100) DEFAULT NULL COMMENT '事件名称(消息事件使用)',
|
||||
`attached_to_node_code` varchar(100) DEFAULT NULL COMMENT '边界事件附着的任务节点编码',
|
||||
`interrupting` tinyint(1) DEFAULT NULL COMMENT '边界事件是否中断型',
|
||||
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志',
|
||||
`tenant_id` varchar(40) DEFAULT NULL COMMENT '租户id',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
@ -81,7 +86,7 @@ CREATE TABLE `flow_instance`
|
||||
`node_code` varchar(100) NOT NULL COMMENT '流程节点编码',
|
||||
`node_name` varchar(100) DEFAULT NULL COMMENT '流程节点名称',
|
||||
`variable` text COMMENT '任务变量',
|
||||
`flow_status` varchar(20) NOT NULL COMMENT '流程状态(0待提交 1审批中 2审批通过 4终止 5作废 6撤销 8已完成 9已退回 10失效 11拿回)',
|
||||
`flow_status` varchar(20) NOT NULL COMMENT '实例状态(draft待提交 waiting审批中 termination终止 invalid作废 cancel撤销 finish已完成 back已退回 restart重启)',
|
||||
`activity_status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '流程激活状态(0挂起 1激活)',
|
||||
`def_json` text COMMENT '流程定义json',
|
||||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
@ -102,7 +107,7 @@ CREATE TABLE `flow_task`
|
||||
`node_code` varchar(100) NOT NULL COMMENT '节点编码',
|
||||
`node_name` varchar(100) DEFAULT NULL COMMENT '节点名称',
|
||||
`node_type` tinyint(1) NOT NULL COMMENT '节点类型(0开始节点 1中间节点 2结束节点 3互斥网关 4并行网关)',
|
||||
`flow_status` varchar(20) NOT NULL COMMENT '流程状态(0待提交 1审批中 2审批通过 4终止 5作废 6撤销 8已完成 9已退回 10失效 11拿回)',
|
||||
`flow_status` varchar(20) NOT NULL COMMENT '任务状态(pending待审批 pass通过 auto_pass自动审批 back退回 invalid失效 take_back拿回 copy抄送;任务结果,勿套用实例状态编码)',
|
||||
`form_custom` char(1) DEFAULT 'N' COMMENT '审批表单是否自定义(Y是 N否)',
|
||||
`form_path` varchar(100) DEFAULT NULL COMMENT '审批表单路径',
|
||||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
@ -126,15 +131,16 @@ CREATE TABLE `flow_his_task`
|
||||
`target_node_code` varchar(200) DEFAULT NULL COMMENT '目标节点编码',
|
||||
`target_node_name` varchar(200) 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减签)',
|
||||
`cooperate_type` varchar(20) NOT NULL DEFAULT 'none' COMMENT '协作方式(none无 transfer转办 delegate委派 add_signer加签 remove_signer减签;行为维度,抄送/会签/票签不落此列,结果见 flow_status)',
|
||||
`collaborator` varchar(500) DEFAULT NULL COMMENT '协作人',
|
||||
`skip_type` varchar(10) NOT NULL COMMENT '流转类型(PASS通过 REJECT退回 NONE无动作)',
|
||||
`flow_status` varchar(20) NOT NULL COMMENT '流程状态(0待提交 1审批中 2审批通过 4终止 5作废 6撤销 8已完成 9已退回 10失效 11拿回)',
|
||||
`flow_status` varchar(20) NOT NULL COMMENT '任务状态(pending待审批 pass通过 auto_pass自动审批 back退回 invalid失效 take_back拿回 copy抄送;任务结果,勿套用实例状态编码,唯一例外是撤回归档写 cancel)',
|
||||
`form_custom` char(1) DEFAULT 'N' COMMENT '审批表单是否自定义(Y是 N否)',
|
||||
`form_path` varchar(100) DEFAULT NULL COMMENT '审批表单路径',
|
||||
`message` varchar(500) DEFAULT NULL COMMENT '审批意见',
|
||||
`variable` TEXT DEFAULT NULL COMMENT '任务变量',
|
||||
`ext` TEXT DEFAULT NULL COMMENT '业务详情 存业务表对象json字符串',
|
||||
`node_config` TEXT DEFAULT NULL COMMENT '节点配置(服务任务等引擎配置与自定义扩展属性json)',
|
||||
`create_time` datetime DEFAULT NULL COMMENT '任务开始时间',
|
||||
`update_time` datetime DEFAULT NULL COMMENT '审批完成时间',
|
||||
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志',
|
||||
@ -146,9 +152,9 @@ CREATE TABLE `flow_his_task`
|
||||
CREATE TABLE `flow_user`
|
||||
(
|
||||
`id` bigint NOT NULL COMMENT '主键id',
|
||||
`type` char(1) NOT NULL COMMENT '人员类型(1待办任务的审批人权限 2待办任务的转办人权限 3待办任务的委托人权限)',
|
||||
`type` char(1) NOT NULL COMMENT '人员类型(1待办任务的审批人权限 2待办任务的转办人权限 3待办任务的委托人权限 4待办任务的抄送人)',
|
||||
`processed_by` varchar(80) DEFAULT NULL COMMENT '权限人',
|
||||
`associated` bigint NOT NULL COMMENT '任务表id',
|
||||
`associated` bigint NOT NULL COMMENT '关联id(待办任务id;抄送人记录为 flow_his_task.id)',
|
||||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`create_by` varchar(80) DEFAULT NULL COMMENT '创建人',
|
||||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||||
@ -160,6 +166,46 @@ CREATE TABLE `flow_user`
|
||||
KEY `user_associated` (`associated`) USING BTREE
|
||||
) ENGINE = InnoDB COMMENT ='流程用户表';
|
||||
|
||||
-- 事件等待表:定时 / 消息等需要“等待”的事件统一落在此表,状态独立于 flow_status。
|
||||
-- 事件能力默认关闭(warm-flow.timer-enabled=false),未开启时引擎不扫描本表。
|
||||
CREATE TABLE `flow_event_wait`
|
||||
(
|
||||
`id` bigint NOT NULL COMMENT '主键id',
|
||||
`tenant_id` varchar(40) DEFAULT NULL COMMENT '租户id',
|
||||
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志',
|
||||
`definition_id` bigint DEFAULT NULL COMMENT '流程定义id(定时启动事件必须有)',
|
||||
`instance_id` bigint DEFAULT NULL COMMENT '流程实例id(实例等待事件必须有)',
|
||||
`node_code` varchar(100) DEFAULT NULL COMMENT '事件节点编码(定位沿用 definition_id + node_code)',
|
||||
`event_type` varchar(40) NOT NULL COMMENT '事件类型(MESSAGE_START TIMER_START TIMER_CATCH MESSAGE_CATCH MESSAGE_THROW TIMER_BOUNDARY MESSAGE_BOUNDARY ERROR_CATCH ERROR_BOUNDARY TERMINATE_END MESSAGE_END)',
|
||||
`event_name` varchar(100) DEFAULT NULL COMMENT '事件名称(消息事件使用)',
|
||||
`attached_task_id` bigint DEFAULT NULL COMMENT '边界事件关联的待办任务id',
|
||||
`trigger_type` varchar(40) DEFAULT NULL COMMENT '触发策略类型(AFTER FIXED POINT_IN_TIME)',
|
||||
`trigger_interval` varchar(100) DEFAULT NULL COMMENT '触发策略原始配置',
|
||||
`next_trigger_at` datetime DEFAULT NULL COMMENT '下次触发时间',
|
||||
`timezone` varchar(40) DEFAULT NULL COMMENT '定时触发使用的时区',
|
||||
`repeat_count` int DEFAULT NULL COMMENT '已触发次数',
|
||||
`max_repeat_count` int DEFAULT NULL COMMENT '最大触发次数',
|
||||
`status` varchar(20) NOT NULL COMMENT '等待状态(WAITING RUNNING CANCELLED RETRY DEAD)',
|
||||
`retry_count` int DEFAULT NULL COMMENT '已重试次数',
|
||||
`max_retry_count` int DEFAULT NULL COMMENT '最大重试次数',
|
||||
`retry_at` datetime DEFAULT NULL COMMENT '下次重试时间',
|
||||
`lock_owner` varchar(64) DEFAULT NULL COMMENT '抢占持有者标识',
|
||||
`lock_until` datetime DEFAULT NULL COMMENT '抢占租约到期时间',
|
||||
`version` int DEFAULT NULL COMMENT '乐观锁版本号',
|
||||
`payload` text COMMENT '消息事件接收的业务载荷',
|
||||
`last_error` varchar(500) DEFAULT NULL COMMENT '最近一次失败原因摘要',
|
||||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
KEY `event_wait_status_next` (`status`, `next_trigger_at`, `id`) USING BTREE,
|
||||
KEY `event_wait_status_retry` (`status`, `retry_at`, `id`) USING BTREE,
|
||||
KEY `event_wait_tenant_status_next` (`tenant_id`, `status`, `next_trigger_at`, `id`) USING BTREE,
|
||||
KEY `event_wait_tenant_status_retry` (`tenant_id`, `status`, `retry_at`, `id`) USING BTREE,
|
||||
KEY `event_wait_instance_task` (`instance_id`, `attached_task_id`) USING BTREE,
|
||||
KEY `event_wait_name_instance_status` (`event_name`, `instance_id`, `status`) USING BTREE,
|
||||
KEY `event_wait_def_node_status` (`definition_id`, `node_code`, `status`) USING BTREE
|
||||
) ENGINE = InnoDB COMMENT ='事件等待表';
|
||||
|
||||
-- ----------------------------
|
||||
-- 流程分类表
|
||||
-- ----------------------------
|
||||
@ -321,18 +367,19 @@ INSERT INTO sys_dict_data VALUES (1761600000000000042, 4, '已完成', 'finish',
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000043, 5, '已作废', 'invalid', 'wf_business_status', '', 'danger', 'N', 1761000000000000103, 1761100000000000001, sysdate(), NULL, NULL, '已作废');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000044, 6, '已退回', 'back', 'wf_business_status', '', 'danger', 'N', 1761000000000000103, 1761100000000000001, sysdate(), NULL, NULL, '已退回');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000045, 7, '已终止', 'termination', 'wf_business_status', '', 'danger', 'N', 1761000000000000103, 1761100000000000001, sysdate(), NULL, NULL, '已终止');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000063, 8, '重启', 'restart', 'wf_business_status', '', 'info', 'N', 1761000000000000103, 1761100000000000001, sysdate(), NULL, NULL, '重启');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000046, 1, '自定义表单', 'static', 'wf_form_type', '', 'success', 'N', 1761000000000000103, 1761100000000000001, sysdate(), NULL, NULL, '自定义表单');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000047, 2, '动态表单', 'dynamic', 'wf_form_type', '', 'primary', 'N', 1761000000000000103, 1761100000000000001, sysdate(), NULL, NULL, '动态表单');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000048, 1, '撤销', 'cancel', 'wf_task_status', '', 'danger', 'N', 1761000000000000103, 1761100000000000001, sysdate(), NULL, NULL, '撤销');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000060, 1, '待审批', 'pending', 'wf_task_status', '', 'primary', 'N', 1761000000000000103, 1761100000000000001, sysdate(), NULL, NULL, '待审批');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000049, 2, '通过', 'pass', 'wf_task_status', '', 'success', 'N', 1761000000000000103, 1761100000000000001, sysdate(), NULL, NULL, '通过');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000050, 3, '待审核', 'waiting', 'wf_task_status', '', 'primary', 'N', 1761000000000000103, 1761100000000000001, sysdate(), NULL, NULL, '待审核');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000051, 4, '作废', 'invalid', 'wf_task_status', '', 'danger', 'N', 1761000000000000103, 1761100000000000001, sysdate(), NULL, NULL, '作废');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000061, 3, '自动审批', 'auto_pass', 'wf_task_status', '', 'success', 'N', 1761000000000000103, 1761100000000000001, sysdate(), NULL, NULL, '自动审批');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000056, 4, '抄送', 'copy', 'wf_task_status', '', 'primary', 'N', 1761000000000000103, 1761100000000000001, sysdate(), NULL, NULL, '抄送');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000052, 5, '退回', 'back', 'wf_task_status', '', 'danger', 'N', 1761000000000000103, 1761100000000000001, sysdate(), NULL, NULL, '退回');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000053, 6, '终止', 'termination', 'wf_task_status', '', 'danger', 'N', 1761000000000000103, 1761100000000000001, sysdate(), NULL, NULL, '终止');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000054, 7, '转办', 'transfer', 'wf_task_status', '', 'primary', 'N', 1761000000000000103, 1761100000000000001, sysdate(), NULL, NULL, '转办');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000055, 8, '委托', 'depute', 'wf_task_status', '', 'primary', 'N', 1761000000000000103, 1761100000000000001, sysdate(), NULL, NULL, '委托');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000056, 9, '抄送', 'copy', 'wf_task_status', '', 'primary', 'N', 1761000000000000103, 1761100000000000001, sysdate(), NULL, NULL, '抄送');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000057, 10, '加签', 'sign', 'wf_task_status', '', 'primary', 'N', 1761000000000000103, 1761100000000000001, sysdate(), NULL, NULL, '加签');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000058, 11, '减签', 'sign_off', 'wf_task_status', '', 'danger', 'N', 1761000000000000103, 1761100000000000001, sysdate(), NULL, NULL, '减签');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000059, 11, '超时', 'timeout', 'wf_task_status', '', 'danger', 'N', 1761000000000000103, 1761100000000000001, sysdate(), NULL, NULL, '超时');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000062, 6, '拿回', 'take_back', 'wf_task_status', '', 'warning', 'N', 1761000000000000103, 1761100000000000001, sysdate(), NULL, NULL, '拿回');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000051, 7, '失效', 'invalid', 'wf_task_status', '', 'danger', 'N', 1761000000000000103, 1761100000000000001, sysdate(), NULL, NULL, '失效');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000048, 8, '撤销', 'cancel', 'wf_task_status', '', 'danger', 'N', 1761000000000000103, 1761100000000000001, sysdate(), NULL, NULL, '撤销');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000064, 9, '转办', 'transfer', 'wf_task_status', '', 'warning', 'N', 1761000000000000103, 1761100000000000001, sysdate(), NULL, NULL, '转办');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000065, 10, '委派', 'delegate', 'wf_task_status', '', 'warning', 'N', 1761000000000000103, 1761100000000000001, sysdate(), NULL, NULL, '委派');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000066, 11, '加签', 'add_signer', 'wf_task_status', '', 'warning', 'N', 1761000000000000103, 1761100000000000001, sysdate(), NULL, NULL, '加签');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000067, 12, '减签', 'remove_signer', 'wf_task_status', '', 'warning', 'N', 1761000000000000103, 1761100000000000001, sysdate(), NULL, NULL, '减签');
|
||||
|
||||
|
||||
@ -8,17 +8,18 @@ CREATE TABLE flow_definition (
|
||||
model_value nvarchar(40) DEFAULT('CLASSICS') NOT NULL,
|
||||
category nvarchar(100) NULL,
|
||||
version nvarchar(20) NOT NULL,
|
||||
is_publish tinyint DEFAULT('0') NULL,
|
||||
is_publish tinyint DEFAULT('0') NOT NULL,
|
||||
form_custom nchar(1) DEFAULT('N') NULL,
|
||||
form_path nvarchar(100) NULL,
|
||||
activity_status tinyint DEFAULT('1') NULL,
|
||||
activity_status tinyint DEFAULT('1') NOT NULL,
|
||||
listener_type nvarchar(100) NULL,
|
||||
listener_path nvarchar(400) NULL,
|
||||
ext nvarchar(500) NULL,
|
||||
def_config nvarchar(max) NULL,
|
||||
create_time datetime2(7) NULL,
|
||||
create_by nvarchar(64) NULL,
|
||||
create_by nvarchar(64) DEFAULT('') NULL,
|
||||
update_time datetime2(7) NULL,
|
||||
update_by nvarchar(64) NULL,
|
||||
update_by nvarchar(64) DEFAULT('') NULL,
|
||||
del_flag nchar(1) DEFAULT('0') NULL,
|
||||
tenant_id nvarchar(40) NULL,
|
||||
CONSTRAINT PK__flow_def__3213E83FEE39AE33 PRIMARY KEY CLUSTERED (id)
|
||||
@ -119,6 +120,13 @@ EXEC sp_addextendedproperty
|
||||
'COLUMN', N'ext'
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'流程定义配置(自动审批等引擎配置与自定义扩展属性json)',
|
||||
'SCHEMA', N'dbo',
|
||||
'TABLE', N'flow_definition',
|
||||
'COLUMN', N'def_config'
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'创建时间',
|
||||
'SCHEMA', N'dbo',
|
||||
@ -181,12 +189,16 @@ CREATE TABLE flow_node (
|
||||
listener_path nvarchar(400) NULL,
|
||||
form_custom nchar(1) DEFAULT('N') NULL,
|
||||
form_path nvarchar(100) NULL,
|
||||
version nvarchar(20) NOT NULL,
|
||||
create_time datetime2(7) NULL,
|
||||
create_by nvarchar(64) NULL,
|
||||
create_by nvarchar(64) DEFAULT('') NULL,
|
||||
update_time datetime2(7) NULL,
|
||||
update_by nvarchar(64) NULL,
|
||||
update_by nvarchar(64) DEFAULT('') NULL,
|
||||
ext nvarchar(max) NULL,
|
||||
node_config nvarchar(max) NULL,
|
||||
event_type nvarchar(40) NULL,
|
||||
event_name nvarchar(100) NULL,
|
||||
attached_to_node_code nvarchar(100) NULL,
|
||||
interrupting tinyint NULL,
|
||||
del_flag nchar(1) DEFAULT('0') NULL,
|
||||
tenant_id nvarchar(40) NULL,
|
||||
CONSTRAINT PK__flow_nod__3213E83F372470DE PRIMARY KEY CLUSTERED (id)
|
||||
@ -287,13 +299,6 @@ EXEC sp_addextendedproperty
|
||||
'COLUMN', N'form_path'
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'版本',
|
||||
'SCHEMA', N'dbo',
|
||||
'TABLE', N'flow_node',
|
||||
'COLUMN', N'version'
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'创建时间',
|
||||
'SCHEMA', N'dbo',
|
||||
@ -329,6 +334,41 @@ EXEC sp_addextendedproperty
|
||||
'COLUMN', N'ext'
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'节点配置(服务任务、事件等引擎节点配置json)',
|
||||
'SCHEMA', N'dbo',
|
||||
'TABLE', N'flow_node',
|
||||
'COLUMN', N'node_config'
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'事件类型(MESSAGE_START TIMER_START TIMER_CATCH MESSAGE_CATCH MESSAGE_THROW TIMER_BOUNDARY MESSAGE_BOUNDARY ERROR_CATCH ERROR_BOUNDARY TERMINATE_END MESSAGE_END)',
|
||||
'SCHEMA', N'dbo',
|
||||
'TABLE', N'flow_node',
|
||||
'COLUMN', N'event_type'
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'事件名称(消息事件使用)',
|
||||
'SCHEMA', N'dbo',
|
||||
'TABLE', N'flow_node',
|
||||
'COLUMN', N'event_name'
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'边界事件附着的任务节点编码',
|
||||
'SCHEMA', N'dbo',
|
||||
'TABLE', N'flow_node',
|
||||
'COLUMN', N'attached_to_node_code'
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'边界事件是否中断型',
|
||||
'SCHEMA', N'dbo',
|
||||
'TABLE', N'flow_node',
|
||||
'COLUMN', N'interrupting'
|
||||
GO
|
||||
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'删除标志',
|
||||
@ -362,9 +402,9 @@ CREATE TABLE flow_skip (
|
||||
skip_condition nvarchar(200) NULL,
|
||||
coordinate nvarchar(100) NULL,
|
||||
create_time datetime2(7) NULL,
|
||||
create_by nvarchar(64) NULL,
|
||||
create_by nvarchar(64) DEFAULT('') NULL,
|
||||
update_time datetime2(7) NULL,
|
||||
update_by nvarchar(64) NULL,
|
||||
update_by nvarchar(64) DEFAULT('') NULL,
|
||||
del_flag nchar(1) DEFAULT('0') NULL,
|
||||
tenant_id nvarchar(40) NULL,
|
||||
CONSTRAINT PK__flow_ski__3213E83F073FEE6E PRIMARY KEY CLUSTERED (id)
|
||||
@ -501,12 +541,12 @@ CREATE TABLE flow_instance (
|
||||
node_name nvarchar(100) NULL,
|
||||
variable nvarchar(max) NULL,
|
||||
flow_status nvarchar(20) NOT NULL,
|
||||
activity_status tinyint DEFAULT('1') NULL,
|
||||
activity_status tinyint DEFAULT('1') NOT NULL,
|
||||
def_json nvarchar(max) NULL,
|
||||
create_time datetime2(7) NULL,
|
||||
create_by nvarchar(64) NULL,
|
||||
create_by nvarchar(64) DEFAULT('') NULL,
|
||||
update_time datetime2(7) NULL,
|
||||
update_by nvarchar(64) NULL,
|
||||
update_by nvarchar(64) DEFAULT('') NULL,
|
||||
ext nvarchar(500) NULL,
|
||||
del_flag nchar(1) DEFAULT('0') NULL,
|
||||
tenant_id nvarchar(40) NULL,
|
||||
@ -568,7 +608,7 @@ EXEC sp_addextendedproperty
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'流程状态(0待提交 1审批中 2审批通过 4终止 5作废 6撤销 8已完成 9已退回 10失效 11拿回)',
|
||||
'MS_Description', N'实例状态(draft待提交 waiting审批中 termination终止 invalid作废 cancel撤销 finish已完成 back已退回 restart重启)',
|
||||
'SCHEMA', N'dbo',
|
||||
'TABLE', N'flow_instance',
|
||||
'COLUMN', N'flow_status'
|
||||
@ -654,9 +694,9 @@ CREATE TABLE flow_task (
|
||||
form_custom nchar(1) DEFAULT('N') NULL,
|
||||
form_path nvarchar(100) NULL,
|
||||
create_time datetime2(7) NULL,
|
||||
create_by nvarchar(64) NULL,
|
||||
create_by nvarchar(64) DEFAULT('') NULL,
|
||||
update_time datetime2(7) NULL,
|
||||
update_by nvarchar(64) NULL,
|
||||
update_by nvarchar(64) DEFAULT('') NULL,
|
||||
del_flag nchar(1) DEFAULT('0') NULL,
|
||||
tenant_id nvarchar(40) NULL,
|
||||
CONSTRAINT PK__flow_tas__3213E83F5AE1F1BA PRIMARY KEY CLUSTERED (id)
|
||||
@ -709,7 +749,7 @@ EXEC sp_addextendedproperty
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'流程状态(0待提交 1审批中 2审批通过 4终止 5作废 6撤销 8已完成 9已退回 10失效 11拿回)',
|
||||
'MS_Description', N'任务状态(pending待审批 pass通过 auto_pass自动审批 back退回 invalid失效 take_back拿回 copy抄送;任务结果,勿套用实例状态编码)',
|
||||
'SCHEMA', N'dbo',
|
||||
'TABLE', N'flow_task',
|
||||
'COLUMN', N'flow_status'
|
||||
@ -782,13 +822,13 @@ CREATE TABLE flow_his_task (
|
||||
definition_id bigint NOT NULL,
|
||||
instance_id bigint NOT NULL,
|
||||
task_id bigint NOT NULL,
|
||||
node_code nvarchar(200) NULL,
|
||||
node_name nvarchar(200) NULL,
|
||||
node_code nvarchar(100) NULL,
|
||||
node_name nvarchar(100) NULL,
|
||||
node_type tinyint NULL,
|
||||
target_node_code nvarchar(100) NULL,
|
||||
target_node_name nvarchar(100) NULL,
|
||||
target_node_code nvarchar(200) NULL,
|
||||
target_node_name nvarchar(200) NULL,
|
||||
approver nvarchar(40) NULL,
|
||||
cooperate_type tinyint DEFAULT('0') NULL,
|
||||
cooperate_type varchar(20) DEFAULT('none') NOT NULL,
|
||||
collaborator nvarchar(500) NULL,
|
||||
skip_type nvarchar(10) NOT NULL,
|
||||
flow_status nvarchar(20) NOT NULL,
|
||||
@ -797,6 +837,7 @@ CREATE TABLE flow_his_task (
|
||||
message nvarchar(500) NULL,
|
||||
variable nvarchar(max) NULL,
|
||||
ext nvarchar(max) NULL,
|
||||
node_config nvarchar(max) NULL,
|
||||
create_time datetime2(7) NULL,
|
||||
update_time datetime2(7) NULL,
|
||||
del_flag nchar(1) DEFAULT('0') NULL,
|
||||
@ -879,7 +920,7 @@ EXEC sp_addextendedproperty
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'协作方式(1审批 2转办 3委派 4会签 5票签 6加签 7减签)',
|
||||
'MS_Description', N'协作方式(none无 transfer转办 delegate委派 add_signer加签 remove_signer减签;行为维度,抄送/会签/票签不落此列,结果见 flow_status)',
|
||||
'SCHEMA', N'dbo',
|
||||
'TABLE', N'flow_his_task',
|
||||
'COLUMN', N'cooperate_type'
|
||||
@ -900,7 +941,7 @@ EXEC sp_addextendedproperty
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'流程状态(0待提交 1审批中 2审批通过 4终止 5作废 6撤销 8已完成 9已退回 10失效 11拿回)',
|
||||
'MS_Description', N'任务状态(pending待审批 pass通过 auto_pass自动审批 back退回 invalid失效 take_back拿回 copy抄送;任务结果,勿套用实例状态编码,唯一例外是撤回归档写 cancel)',
|
||||
'SCHEMA', N'dbo',
|
||||
'TABLE', N'flow_his_task',
|
||||
'COLUMN', N'flow_status'
|
||||
@ -941,6 +982,13 @@ EXEC sp_addextendedproperty
|
||||
'COLUMN', N'ext'
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'节点配置(服务任务等引擎配置与自定义扩展属性json)',
|
||||
'SCHEMA', N'dbo',
|
||||
'TABLE', N'flow_his_task',
|
||||
'COLUMN', N'node_config'
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'任务开始时间',
|
||||
'SCHEMA', N'dbo',
|
||||
@ -981,9 +1029,9 @@ CREATE TABLE flow_user (
|
||||
processed_by nvarchar(80) NULL,
|
||||
associated bigint NOT NULL,
|
||||
create_time datetime2(7) NULL,
|
||||
create_by nvarchar(64) NULL,
|
||||
create_by nvarchar(80) NULL,
|
||||
update_time datetime2(7) NULL,
|
||||
update_by nvarchar(64) NULL,
|
||||
update_by nvarchar(64) DEFAULT('') NULL,
|
||||
del_flag nchar(1) DEFAULT('0') NULL,
|
||||
tenant_id nvarchar(40) NULL,
|
||||
CONSTRAINT PK__flow_use__3213E83FFA38CA8B PRIMARY KEY CLUSTERED (id)
|
||||
@ -1006,7 +1054,7 @@ EXEC sp_addextendedproperty
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'人员类型(1待办任务的审批人权限 2待办任务的转办人权限 3待办任务的委托人权限)',
|
||||
'MS_Description', N'人员类型(1待办任务的审批人权限 2待办任务的转办人权限 3待办任务的委托人权限 4待办任务的抄送人)',
|
||||
'SCHEMA', N'dbo',
|
||||
'TABLE', N'flow_user',
|
||||
'COLUMN', N'type'
|
||||
@ -1020,7 +1068,7 @@ EXEC sp_addextendedproperty
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'任务表id',
|
||||
'MS_Description', N'关联id(待办任务id;抄送人记录为 flow_his_task.id)',
|
||||
'SCHEMA', N'dbo',
|
||||
'TABLE', N'flow_user',
|
||||
'COLUMN', N'associated'
|
||||
@ -1074,6 +1122,244 @@ EXEC sp_addextendedproperty
|
||||
'TABLE', N'flow_user'
|
||||
GO
|
||||
|
||||
-- 事件等待表:定时 / 消息等需要“等待”的事件统一落在此表,状态独立于流程状态。
|
||||
CREATE TABLE flow_event_wait (
|
||||
id bigint NOT NULL,
|
||||
tenant_id nvarchar(40) NULL,
|
||||
del_flag nchar(1) DEFAULT('0') NULL,
|
||||
definition_id bigint NULL,
|
||||
instance_id bigint NULL,
|
||||
node_code nvarchar(100) NULL,
|
||||
event_type nvarchar(40) NOT NULL,
|
||||
event_name nvarchar(100) NULL,
|
||||
attached_task_id bigint NULL,
|
||||
trigger_type nvarchar(40) NULL,
|
||||
trigger_interval nvarchar(100) NULL,
|
||||
next_trigger_at datetime2(7) NULL,
|
||||
timezone nvarchar(40) NULL,
|
||||
repeat_count int NULL,
|
||||
max_repeat_count int NULL,
|
||||
status nvarchar(20) NOT NULL,
|
||||
retry_count int NULL,
|
||||
max_retry_count int NULL,
|
||||
retry_at datetime2(7) NULL,
|
||||
lock_owner nvarchar(64) NULL,
|
||||
lock_until datetime2(7) NULL,
|
||||
version int NULL,
|
||||
payload nvarchar(max) NULL,
|
||||
last_error nvarchar(500) NULL,
|
||||
create_time datetime2(7) NULL,
|
||||
update_time datetime2(7) NULL,
|
||||
CONSTRAINT PK_flow_event_wait PRIMARY KEY CLUSTERED (id)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
|
||||
ON [PRIMARY]
|
||||
)
|
||||
ON [PRIMARY]
|
||||
GO
|
||||
|
||||
CREATE NONCLUSTERED INDEX event_wait_status_next ON flow_event_wait (status ASC, next_trigger_at ASC, id ASC)
|
||||
GO
|
||||
CREATE NONCLUSTERED INDEX event_wait_status_retry ON flow_event_wait (status ASC, retry_at ASC, id ASC)
|
||||
GO
|
||||
CREATE NONCLUSTERED INDEX event_wait_tenant_status_next ON flow_event_wait (tenant_id ASC, status ASC, next_trigger_at ASC, id ASC)
|
||||
GO
|
||||
CREATE NONCLUSTERED INDEX event_wait_tenant_status_retry ON flow_event_wait (tenant_id ASC, status ASC, retry_at ASC, id ASC)
|
||||
GO
|
||||
CREATE NONCLUSTERED INDEX event_wait_instance_task ON flow_event_wait (instance_id ASC, attached_task_id ASC)
|
||||
GO
|
||||
CREATE NONCLUSTERED INDEX event_wait_name_instance_status ON flow_event_wait (event_name ASC, instance_id ASC, status ASC)
|
||||
GO
|
||||
CREATE NONCLUSTERED INDEX event_wait_def_node_status ON flow_event_wait (definition_id ASC, node_code ASC, status ASC)
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'事件等待表',
|
||||
'SCHEMA', N'dbo',
|
||||
'TABLE', N'flow_event_wait'
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'主键id',
|
||||
'SCHEMA', N'dbo',
|
||||
'TABLE', N'flow_event_wait',
|
||||
'COLUMN', N'id'
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'租户id',
|
||||
'SCHEMA', N'dbo',
|
||||
'TABLE', N'flow_event_wait',
|
||||
'COLUMN', N'tenant_id'
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'删除标志',
|
||||
'SCHEMA', N'dbo',
|
||||
'TABLE', N'flow_event_wait',
|
||||
'COLUMN', N'del_flag'
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'流程定义id(定时启动事件必须有)',
|
||||
'SCHEMA', N'dbo',
|
||||
'TABLE', N'flow_event_wait',
|
||||
'COLUMN', N'definition_id'
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'流程实例id(实例等待事件必须有)',
|
||||
'SCHEMA', N'dbo',
|
||||
'TABLE', N'flow_event_wait',
|
||||
'COLUMN', N'instance_id'
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'事件节点编码(定位沿用 definition_id + node_code)',
|
||||
'SCHEMA', N'dbo',
|
||||
'TABLE', N'flow_event_wait',
|
||||
'COLUMN', N'node_code'
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'事件类型(MESSAGE_START TIMER_START TIMER_CATCH MESSAGE_CATCH MESSAGE_THROW TIMER_BOUNDARY MESSAGE_BOUNDARY ERROR_CATCH ERROR_BOUNDARY TERMINATE_END MESSAGE_END)',
|
||||
'SCHEMA', N'dbo',
|
||||
'TABLE', N'flow_event_wait',
|
||||
'COLUMN', N'event_type'
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'事件名称(消息事件使用)',
|
||||
'SCHEMA', N'dbo',
|
||||
'TABLE', N'flow_event_wait',
|
||||
'COLUMN', N'event_name'
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'边界事件关联的待办任务id',
|
||||
'SCHEMA', N'dbo',
|
||||
'TABLE', N'flow_event_wait',
|
||||
'COLUMN', N'attached_task_id'
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'触发策略类型(AFTER FIXED POINT_IN_TIME)',
|
||||
'SCHEMA', N'dbo',
|
||||
'TABLE', N'flow_event_wait',
|
||||
'COLUMN', N'trigger_type'
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'触发策略原始配置',
|
||||
'SCHEMA', N'dbo',
|
||||
'TABLE', N'flow_event_wait',
|
||||
'COLUMN', N'trigger_interval'
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'下次触发时间',
|
||||
'SCHEMA', N'dbo',
|
||||
'TABLE', N'flow_event_wait',
|
||||
'COLUMN', N'next_trigger_at'
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'定时触发使用的时区',
|
||||
'SCHEMA', N'dbo',
|
||||
'TABLE', N'flow_event_wait',
|
||||
'COLUMN', N'timezone'
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'已触发次数',
|
||||
'SCHEMA', N'dbo',
|
||||
'TABLE', N'flow_event_wait',
|
||||
'COLUMN', N'repeat_count'
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'最大触发次数',
|
||||
'SCHEMA', N'dbo',
|
||||
'TABLE', N'flow_event_wait',
|
||||
'COLUMN', N'max_repeat_count'
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'等待状态(WAITING RUNNING CANCELLED RETRY DEAD)',
|
||||
'SCHEMA', N'dbo',
|
||||
'TABLE', N'flow_event_wait',
|
||||
'COLUMN', N'status'
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'已重试次数',
|
||||
'SCHEMA', N'dbo',
|
||||
'TABLE', N'flow_event_wait',
|
||||
'COLUMN', N'retry_count'
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'最大重试次数',
|
||||
'SCHEMA', N'dbo',
|
||||
'TABLE', N'flow_event_wait',
|
||||
'COLUMN', N'max_retry_count'
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'下次重试时间',
|
||||
'SCHEMA', N'dbo',
|
||||
'TABLE', N'flow_event_wait',
|
||||
'COLUMN', N'retry_at'
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'抢占持有者标识',
|
||||
'SCHEMA', N'dbo',
|
||||
'TABLE', N'flow_event_wait',
|
||||
'COLUMN', N'lock_owner'
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'抢占租约到期时间',
|
||||
'SCHEMA', N'dbo',
|
||||
'TABLE', N'flow_event_wait',
|
||||
'COLUMN', N'lock_until'
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'乐观锁版本号',
|
||||
'SCHEMA', N'dbo',
|
||||
'TABLE', N'flow_event_wait',
|
||||
'COLUMN', N'version'
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'消息事件接收的业务载荷',
|
||||
'SCHEMA', N'dbo',
|
||||
'TABLE', N'flow_event_wait',
|
||||
'COLUMN', N'payload'
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'最近一次失败原因摘要',
|
||||
'SCHEMA', N'dbo',
|
||||
'TABLE', N'flow_event_wait',
|
||||
'COLUMN', N'last_error'
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'创建时间',
|
||||
'SCHEMA', N'dbo',
|
||||
'TABLE', N'flow_event_wait',
|
||||
'COLUMN', N'create_time'
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'更新时间',
|
||||
'SCHEMA', N'dbo',
|
||||
'TABLE', N'flow_event_wait',
|
||||
'COLUMN', N'update_time'
|
||||
GO
|
||||
|
||||
CREATE TABLE flow_category (
|
||||
category_id bigint NOT NULL,
|
||||
parent_id bigint DEFAULT(0) NULL,
|
||||
@ -1661,31 +1947,29 @@ INSERT sys_dict_data VALUES (1761600000000000044, 6, N'已退回', N'back', N'wf
|
||||
GO
|
||||
INSERT sys_dict_data VALUES (1761600000000000045, 7, N'已终止', N'termination', N'wf_business_status', N'', N'danger', N'N', 1761000000000000103, 1761100000000000001, GETDATE(), NULL, NULL, N'已终止');
|
||||
GO
|
||||
INSERT sys_dict_data VALUES (1761600000000000063, 8, N'重启', N'restart', N'wf_business_status', N'', N'info', N'N', 1761000000000000103, 1761100000000000001, GETDATE(), NULL, NULL, N'重启');
|
||||
GO
|
||||
INSERT sys_dict_data VALUES (1761600000000000046, 1, N'自定义表单', N'static', N'wf_form_type', N'', N'success', N'N', 1761000000000000103, 1761100000000000001, GETDATE(), NULL, NULL, N'自定义表单');
|
||||
GO
|
||||
INSERT sys_dict_data VALUES (1761600000000000047, 2, N'动态表单', N'dynamic', N'wf_form_type', N'', N'primary', N'N', 1761000000000000103, 1761100000000000001, GETDATE(), NULL, NULL, N'动态表单');
|
||||
GO
|
||||
INSERT sys_dict_data VALUES (1761600000000000048, 1, N'撤销', N'cancel', N'wf_task_status', N'', N'danger', N'N', 1761000000000000103, 1761100000000000001, GETDATE(), NULL, NULL, N'撤销');
|
||||
INSERT sys_dict_data VALUES (1761600000000000060, 1, N'待审批', N'pending', N'wf_task_status', N'', N'primary', N'N', 1761000000000000103, 1761100000000000001, GETDATE(), NULL, NULL, N'待审批');
|
||||
GO
|
||||
INSERT sys_dict_data VALUES (1761600000000000049, 2, N'通过', N'pass', N'wf_task_status', N'', N'success', N'N', 1761000000000000103, 1761100000000000001, GETDATE(), NULL, NULL, N'通过');
|
||||
GO
|
||||
INSERT sys_dict_data VALUES (1761600000000000050, 3, N'待审核', N'waiting', N'wf_task_status', N'', N'primary', N'N', 1761000000000000103, 1761100000000000001, GETDATE(), NULL, NULL, N'待审核');
|
||||
INSERT sys_dict_data VALUES (1761600000000000061, 3, N'自动审批', N'auto_pass', N'wf_task_status', N'', N'success', N'N', 1761000000000000103, 1761100000000000001, GETDATE(), NULL, NULL, N'自动审批');
|
||||
GO
|
||||
INSERT sys_dict_data VALUES (1761600000000000051, 4, N'作废', N'invalid', N'wf_task_status', N'', N'danger', N'N', 1761000000000000103, 1761100000000000001, GETDATE(), NULL, NULL, N'作废');
|
||||
INSERT sys_dict_data VALUES (1761600000000000056, 4, N'抄送', N'copy', N'wf_task_status', N'', N'primary', N'N', 1761000000000000103, 1761100000000000001, GETDATE(), NULL, NULL, N'抄送');
|
||||
GO
|
||||
INSERT sys_dict_data VALUES (1761600000000000052, 5, N'退回', N'back', N'wf_task_status', N'', N'danger', N'N', 1761000000000000103, 1761100000000000001, GETDATE(), NULL, NULL, N'退回');
|
||||
GO
|
||||
INSERT sys_dict_data VALUES (1761600000000000053, 6, N'终止', N'termination', N'wf_task_status', N'', N'danger', N'N', 1761000000000000103, 1761100000000000001, GETDATE(), NULL, NULL, N'终止');
|
||||
INSERT sys_dict_data VALUES (1761600000000000062, 6, N'拿回', N'take_back', N'wf_task_status', N'', N'warning', N'N', 1761000000000000103, 1761100000000000001, GETDATE(), NULL, NULL, N'拿回');
|
||||
GO
|
||||
INSERT sys_dict_data VALUES (1761600000000000054, 7, N'转办', N'transfer', N'wf_task_status', N'', N'primary', N'N', 1761000000000000103, 1761100000000000001, GETDATE(), NULL, NULL, N'转办');
|
||||
INSERT sys_dict_data VALUES (1761600000000000051, 7, N'失效', N'invalid', N'wf_task_status', N'', N'danger', N'N', 1761000000000000103, 1761100000000000001, GETDATE(), NULL, NULL, N'失效');
|
||||
GO
|
||||
INSERT sys_dict_data VALUES (1761600000000000055, 8, N'委托', N'depute', N'wf_task_status', N'', N'primary', N'N', 1761000000000000103, 1761100000000000001, GETDATE(), NULL, NULL, N'委托');
|
||||
GO
|
||||
INSERT sys_dict_data VALUES (1761600000000000056, 9, N'抄送', N'copy', N'wf_task_status', N'', N'primary', N'N', 1761000000000000103, 1761100000000000001, GETDATE(), NULL, NULL, N'抄送');
|
||||
GO
|
||||
INSERT sys_dict_data VALUES (1761600000000000057, 10, N'加签', N'sign', N'wf_task_status', N'', N'primary', N'N', 1761000000000000103, 1761100000000000001, GETDATE(), NULL, NULL, N'加签');
|
||||
GO
|
||||
INSERT sys_dict_data VALUES (1761600000000000058, 11, N'减签', N'sign_off', N'wf_task_status', N'', N'danger', N'N', 1761000000000000103, 1761100000000000001, GETDATE(), NULL, NULL, N'减签');
|
||||
GO
|
||||
INSERT sys_dict_data VALUES (1761600000000000059, 11, N'超时', N'timeout', N'wf_task_status', N'', N'danger', N'N', 1761000000000000103, 1761100000000000001, GETDATE(), NULL, NULL, N'超时');
|
||||
INSERT sys_dict_data VALUES (1761600000000000048, 8, N'撤销', N'cancel', N'wf_task_status', N'', N'danger', N'N', 1761000000000000103, 1761100000000000001, GETDATE(), NULL, NULL, N'撤销');
|
||||
INSERT sys_dict_data VALUES (1761600000000000064, 9, N'转办', N'transfer', N'wf_task_status', N'', N'warning', N'N', 1761000000000000103, 1761100000000000001, GETDATE(), NULL, NULL, N'转办');
|
||||
INSERT sys_dict_data VALUES (1761600000000000065, 10, N'委派', N'delegate', N'wf_task_status', N'', N'warning', N'N', 1761000000000000103, 1761100000000000001, GETDATE(), NULL, NULL, N'委派');
|
||||
INSERT sys_dict_data VALUES (1761600000000000066, 11, N'加签', N'add_signer', N'wf_task_status', N'', N'warning', N'N', 1761000000000000103, 1761100000000000001, GETDATE(), NULL, NULL, N'加签');
|
||||
INSERT sys_dict_data VALUES (1761600000000000067, 12, N'减签', N'remove_signer', N'wf_task_status', N'', N'warning', N'N', 1761000000000000103, 1761100000000000001, GETDATE(), NULL, NULL, N'减签');
|
||||
GO
|
||||
|
||||
33
script/sql/update/update_6.0.0-6.1.0.sql
Normal file
33
script/sql/update/update_6.0.0-6.1.0.sql
Normal file
@ -0,0 +1,33 @@
|
||||
-- ============================================================
|
||||
-- RuoYi-Vue-Plus 6.0.0 → 6.1.0 工作流升级脚本(MySQL)
|
||||
-- 对齐 warm-flow 2.1.0:删除废弃的节点版本列、状态字典改为小写英文编码
|
||||
-- 只给存量库执行;全新建库直接用 script/sql/ry_workflow.sql,无需本脚本
|
||||
-- 执行完到「系统管理 → 缓存管理 → 刷新缓存」刷一次字典缓存,否则前端仍显示旧文案
|
||||
-- ============================================================
|
||||
|
||||
-- 1. 节点版本已统一由流程定义管理,flow_node.version 在引擎 1.8.9 起就不存在了
|
||||
-- 旧全量脚本里该列是 NOT NULL 且无默认值,引擎写节点会报「doesn't have a default value」
|
||||
ALTER TABLE `flow_node` DROP COLUMN `version`;
|
||||
|
||||
-- 2. 任务状态字典改为引擎 TaskStatus 的 7 个码,外加撤回归档留痕的 cancel
|
||||
DELETE FROM sys_dict_data WHERE dict_type = 'wf_task_status';
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000060, 1, '待审批', 'pending', 'wf_task_status', '', 'primary', 'N', 1761000000000000103, 1761100000000000001, sysdate(), NULL, NULL, '待审批');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000049, 2, '通过', 'pass', 'wf_task_status', '', 'success', 'N', 1761000000000000103, 1761100000000000001, sysdate(), NULL, NULL, '通过');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000061, 3, '自动审批', 'auto_pass', 'wf_task_status', '', 'success', 'N', 1761000000000000103, 1761100000000000001, sysdate(), NULL, NULL, '自动审批');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000056, 4, '抄送', 'copy', 'wf_task_status', '', 'primary', 'N', 1761000000000000103, 1761100000000000001, sysdate(), NULL, NULL, '抄送');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000052, 5, '退回', 'back', 'wf_task_status', '', 'danger', 'N', 1761000000000000103, 1761100000000000001, sysdate(), NULL, NULL, '退回');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000062, 6, '拿回', 'take_back', 'wf_task_status', '', 'warning', 'N', 1761000000000000103, 1761100000000000001, sysdate(), NULL, NULL, '拿回');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000051, 7, '失效', 'invalid', 'wf_task_status', '', 'danger', 'N', 1761000000000000103, 1761100000000000001, sysdate(), NULL, NULL, '失效');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000048, 8, '撤销', 'cancel', 'wf_task_status', '', 'danger', 'N', 1761000000000000103, 1761100000000000001, sysdate(), NULL, NULL, '撤销');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000064, 9, '转办', 'transfer', 'wf_task_status', '', 'warning', 'N', 1761000000000000103, 1761100000000000001, sysdate(), NULL, NULL, '转办');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000065, 10, '委派', 'delegate', 'wf_task_status', '', 'warning', 'N', 1761000000000000103, 1761100000000000001, sysdate(), NULL, NULL, '委派');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000066, 11, '加签', 'add_signer', 'wf_task_status', '', 'warning', 'N', 1761000000000000103, 1761100000000000001, sysdate(), NULL, NULL, '加签');
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000067, 12, '减签', 'remove_signer', 'wf_task_status', '', 'warning', 'N', 1761000000000000103, 1761100000000000001, sysdate(), NULL, NULL, '减签');
|
||||
|
||||
-- 原来的 waiting / termination / transfer / depute / sign / sign_off / timeout 已随上面整组删除:
|
||||
-- 前两个属实例维度(wf_business_status 有),其余属协作维度 cooperate_type(transfer / delegate /
|
||||
-- add_signer / remove_signer),timeout 是 flow_event_wait 的状态,都不是任务状态。
|
||||
-- take_back 目前没有写入方,是留给「拿回」功能的占位,别当冗余删掉。
|
||||
|
||||
-- 3. 实例状态字典补 restart(引擎 FlowStatus 有,字典缺)
|
||||
INSERT INTO sys_dict_data VALUES (1761600000000000063, 8, '重启', 'restart', 'wf_business_status', '', 'info', 'N', 1761000000000000103, 1761100000000000001, sysdate(), NULL, NULL, '重启');
|
||||
Loading…
Reference in New Issue
Block a user